int a[10], *p;
p = &a[0]; // 指向首元素
p = a; // 等價寫法,陣列名即首元素位址
利用位址運算規則:
a + i 為 a[i] 位址*(a + i) 為 a[i] 值p + i、*(p + i) 同理指標變數可直接使用下標:p[i] ≡ *(p + i)。編譯器自動處理型別大小縮放。
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = a;
for (int i = 0; i < 10; i++)
printf("%d ", *p++); // 依序印出 1 到 10
指標遞增 p++ 自動移動到下一個 int 元素,比下標存取更接近機器碼,效率略高。
二維陣列 int a[3][4] 中,a 型別為 int (*)[4](指向含 4 個 int 陣列的指標)。a[i] 等價 *(a + i),型別轉為 int* 指向該列首元素。指標操作多維陣列需注意型別匹配。