指標,二級指標,指標陣列與陣列指標 練習day—17
阿新 • • 發佈:2018-12-20
1.指標
1)指標就是個變數,用來存放地址,地址唯一標識一塊記憶體空間; 2)指標的大小是固定的4(8)個位元組(32(64)位平臺); 3)指標是有型別的,指標的型別決定了指標的+/-整數的步長,指標解引用操作時的許可權;
int main()
{
int a = 1;
int* pa = &a;
*pa = 2;
printf("%p\n",&a);
printf("%p\n",pa);
printf("%d\n",a);
return 0;
}
執行結果如下 畫圖理解
2.二級指標
由於指標變數也是變數,是變數就有地址,那麼一級指標變數的地址就是二級指標。
int main()
{
int a = 10;
int* pa = &a;
int** ppa = &pa;
**ppa = 30;//等價於 *pa=30;/ a=30;
printf("%d\n",a); //30
*pa = 20;
printf("%d\n",a); //20
return 0;
}
畫圖理解
3.指標陣列與陣列指標
1)指標陣列: int * p1[10] 由於[]的優先順序高於*,所以p1先於[10]結合成為陣列,陣列的元素型別為int* ; 指標陣列是陣列, 陣列的每個元素都是指標; 2)陣列指標: int (* p2)[10] 由於()的優先順序高於[],所以p先和*結合,說明p是一個指標變數,指向一個大小為10的整型陣列 ; 指標陣列是指標, 能夠指向一個數組;
int main()
{
int a[5] = {1,2,3,4,5};
//pa1為指標陣列,陣列的每個元素為a陣列元素的地址
int* pa1[5] = {&a[0],&a[1],&a[2],&a[3],&a[4]};
//pa2為陣列指標,指標指向陣列a
int (*pa2)[5] = &a;
return 0;
}
讓我們練習下,解釋下面程式碼的意思
int arr[5]; //長度為5的整型陣列 int* parr1[10]; //parr1為指標陣列,陣列大小為10,元素型別是指向整型的指標 int (*parr2)[10]; //parr2為陣列指標,指標指向一個大小為10的整型陣列 int (*parr3[10])[5];//parr3為陣列,陣列大小為5 //元素型別是:大小為10且元素型別是指向整型的指標的指標陣列