首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 語言指針進階:二維數組指針與行指針詳解

     編輯:C 語言基礎

二維數組記憶體佈局

`int a[3][4]` 在記憶體中連續存儲 12 個 `int`,按行主序。可視為 3 個一維數組 `a[0], a[1], a[2]`,每個長 4。

地址表達式等價關系

  • 數組名 `a` → 首地址 `&a[0][0]`,類型 `int (*)[4]`(指向含 4 元素數組的指針)。
  • `a+i` → 第 i 行首地址 `&a[i][0]`,類型同 `a`。
  • `a[i]` → 第 i 行首地址,類型 `int*`(退化為指向首元素)。
  • `*(a+i)` 等價 `a[i]`。
  • `a[i]+j` / `*(a+i)+j` / `&a[i][j]` 皆為第 i 行第 j 列元素地址。
  • 元素值:`a[i][j]` = `*(a[i]+j)` = `*(*(a+i)+j)` = `(*(a+i))[j]`。

為何 `a == *a` 數值相等?

`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` 步長為元素大小,靈活轉換下標與指針形式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved