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

C語言二維陣列與指標深度解析:記憶體佈局、存取與指標運算

     編輯:關於C語言

一、二維陣列本質

  • 記憶體中連續儲存,按列優先(Row-major)排列。
  • int a[2][5] 佔用 2×5×sizeof(int) 位元組,邏輯上可視為 2 個長度 5 的一維陣列。
  • 一維陣列與二維陣列在記憶體效率上完全相同,二維陣列僅提供語法便利。

二、維度概念

int a[2][5]:

  • 第一維(2):最外層,包含 2 個元素,每個元素是一個長度 5 的陣列(第二維)。
  • 第二維(5):內層陣列,存放 int 值。

三、下標存取與指標等價

int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
int (*p)[5];      // 指向「長度 5 的 int 陣列」的指標
p = a;            // 等同 p = &a[0]

/* a[1][2] 等價寫法 */
printf("%d\n", a[1][2]);           // 8
printf("%d\n", *(*(p+1)+2));       // 8

四、關鍵符號的型別與值

運算式值(位址)型別
a陣列起始位址int (*)[5]
&a陣列起始位址int (*)[2][5]
a[0]第 0 列起始位址int *
&a[0]第 0 列起始位址int (*)[5]
a[0][0]第一個元素值int
&a[0][0]第一個元素位址int *

結論:數值上皆相等,但型別不同,決定指標運算步長(+1 跳躍多少位元組)。

五、指標變數操作二維陣列

int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
int (*p1)[5];   // 陣列指標
int *p2;        // 普通指標
p1 = a;         // 指向整個二維陣列的第一列
p2 = a[0];      // 指向第一列的第一個元素

/* 透過 p1 存取 */
*(*(p1+0)+2)  → a[0][2] = 3
*(*(p1+1)+2)  → a[1][2] = 8

/* 透過 p2 存取(視為一維) */
*(p2+2)  → a[0][2] = 3
*(p2+4)  → a[0][4] = 5

六、總結

  1. 理解二維陣列連續記憶體佈局與型別系統。
  2. 熟練使用 int (*p)[N] 陣列指標操作二維陣列。
  3. 實作練習是深化理解的唯一途徑。
註:學習筆記摘自朱有鵬老師物聯網視頻教程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved