int arry[3][5] = {{1,2,4},{4,5,6,7},{6,5,3,8}};
int (*p)[5]; // p 指向含 5 個 int 的一維數組
p = arry; // p 指向 arry 首地址(第 0 行)
| 表達式 | 類型 | 含義 | 結果 |
|---|---|---|---|
*(p+1)+3 | int* | p+1 指向第 1 行首地址,解引用降維為 int*,+3 偏移 3 個 int → 第 1 行第 3 列地址 | 地址 |
*(*(p+1)+3) | int | 再解引用取值 → 第 1 行第 3 列的值(7) | 值 |
p+1 | int(*)[5] | 指向第 1 行首地址 | 地址 |
*p+1 | int* | 第 0 行首地址 +1 → 第 0 行第 1 列地址 | 地址 |
**p | int | 第 0 行第 0 列值(1) | 值 |
&p | int(*)[5]* | 指標變數 p 自身的地址 | 地址 |
p 為數組指標,步長 = sizeof(int)*5。* 降低維度:int(*)[5] --*--> int* --*--> int。arry[i][j] == *(*(arry+i)+j) == *(p[i]+j) == *(*(p+i)+j)。圖解參考原最佳回答附圖。