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

C語言二維數組指針深度解析:地址計算與等價形式

     編輯:關於C語言

二維數組內存佈局視角

二維數組 int a[3][4] 可視為 3 個一維數組組成的數組:a[0]、a[1]、a[2],每個含 4 個 int 元素。內存按行主序連續存放。

地址表示等價形式

假設首地址為 1000,int 佔 2 字節(16位環境):

  • a → 1000(第 0 行首地址)
  • a+1 → 1008(第 1 行首地址,跨過 4 個 int)
  • a+2 → 1016(第 2 行首地址)

行指針與元素地址:

  • a[i] 等價 *(a+i) → 第 i 行首地址(&a[i][0])
  • a[i]+j 等價 *(a+i)+j → 第 i 行第 j 列元素地址(&a[i][j])

元素值的多種表示

a[i][j] 等價於:

  • *(a[i]+j)
  • *(*(a+i)+j)
  • (*(a+i))[j]

為何 a 與 *a 值相同?

a 是二維數組首地址(第 0 行地址)。*a 解引用得到第 0 行數組名 a[0],而數組名在表達式中退化為首元素地址 &a[0][0]。兩者數值相同但類型不同:

  • a 類型:int (*)[4](指向 4 個 int 的數組指針)
  • *a 類型:int *(指向 int 的指針)

指針變量指向二維數組

int (*p)[4] = a; // p 指向包含 4 個 int 的數組
// p+i → 第 i 行
// *(p+i)+j → a[i][j] 地址
// *(*(p+i)+j) → a[i][j] 值

掌握二維數組指針運算是處理矩陣、圖像數據、多維數據結構的基礎。

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