int a[] = {1,2,3,4,5};
iterate(a); // void iterate(int *p) { for(i=0;i<5;i++) printf("%d", *p++); }
int (*p)[3]; // p 指向「含 3 個 int 的陣列」
int a[3][3] = {{11,12,13},{14,15,16},{17,18,19}};
iterate(a); // void iterate(int (*p)[3]) { printf("%d", *(*(p+i)+j)); }
*(*(p+i)+j) 等價 p[i][j],p+i 移動整行大小(3×sizeof(int))。
char *p[3]char *strs[3] = {"zhanhua", "linin", "wanwu"};
for (int i=0;i<3;i++) printf("%s", *(strs+i)); // 或 strs[i]
char **pschar **ps = strs; // ps 指向指標陣列首元素
for (int i=0;i<3;i++) printf("%s", *(ps+i));
| 宣告 | 含義 | sizeof(變數) |
|---|---|---|
int *p | 指向 int 的指標 | 4/8 |
int (*p)[3] | 指向 int[3] 的指標 | 4/8 |
int *p[3] | 3 個 int* 的陣列 | 3×4/8 |
int **p | 指向 int* 的指標 | 4/8 |
理解「類型決定解參考行為」、「指標運算步長由指向類型決定」,即可輕鬆駕馭多維陣列與指標陣列互轉。