`int a[3][4]` 在記憶體中連續存儲 12 個 `int`,按行主序。可視為 3 個一維數組 `a[0], a[1], a[2]`,每個長 4。
`a` 是整個二維數組首地址;`*a` 即 `a[0]`,是第一行首地址。二維數組首地址與第一行首地址數值相同,但類型不同(`int(*)[4]` vs `int*`),解引用行為不同。
a (1000) → ┌───┬───┬───┬───┐
│ 0 │ 1 │ 2 │ 3 │ a[0] / *a
├───┼───┼───┼───┤
a+1 (1008) │ 4 │ 5 │ 6 │ 7 │ a[1]
├───┼───┼───┼───┤
a+2 (1016) │ 8 │ 9 │10 │11 │ a[2]
└───┴───┴───┴───┘
掌握二維數組指針的關鍵在於區分「數組指針」`int (*)[N]` 與「元素指針」`int*`,理解 `a+i` 步長為行大小,`a[i]+j` 步長為元素大小,靈活轉換下標與指針形式。