指向二維陣列的指標測試

2022-05-22 12:57:10 字數 1130 閱讀 8087

定義a為二維陣列後,有三種成份:陣列本身、3個一維陣列(a的每一行對應乙個一維陣列)、12個陣列元素,

由此就有三種指標及對應的指標變數,

&a和int (*p1)[3][4](沒有實用意義)、

&a[i]和int (*p2)[4](當i為0時,&a[0]可簡化為a)、

a[i][j]和int *p3;

由於指標型別匹配是完全匹配,所以初始化形式必須嚴謹。

上面有人寫出

int

(*p)[4]=&a;

則是型別不匹配,指向一維陣列的指標變數指向了二維陣列,儘管有些編譯器只給warning、儘管有人認為指標值(二維陣列a和一維陣列a[0]的位址值)是相同的,事實是型別不匹配、錯誤

還有人寫出

int *p = &a[0][0];/*或者int *p = a[0];*/

結論是 

int (*p)[4]=a;/*或者int (*p)[4]=&a[0]*/

是嚴格指標型別匹配的,且p具有陣列結構資訊(列數),可以直接訪問陣列元素

*(*(p+i)+j)等價於a[i][j]

提供乙個小「伎倆」供分析用:指標(變數)左邊乙個*可等效替換為右邊乙個[],兩個*可等效替換為。。。

上面為引用自csdn的討論

寫個程式測試一下

1:  #include
2:
3:  

int main()

4:  ,,};
6:  

int i, j;

7:  

int (*p)[5] = s;//=&s[0];

8:  

int *q = &s[0][0];

9:
10:      printf("%d ",s[0][0]);
11:      printf("%d ",*s[0]);
12:      printf("%d ",**s);
13:
14:      printf("%d ",*(*(p+2)+2) );
15:      printf("%d ",*(q+12));
16:  }

二維陣列與指向二維陣列的指標

指標陣列 是陣列元素為指標的陣列,本質為陣列。int p n 陣列指標 是指向陣列首元素的指標,其本質為指標。int p n 的優先順序高於指標運算子 操縱二維陣列 int a i j int pa j pa a a 代表該二維陣列的首位址 pa 代表該二維陣列的首位址 pa 也代表該二維陣列的首位...

C語言二維陣列指標(指向二維陣列的指標)

二維陣列的定義 int matrix 見圖的操作那篇文章裡面的定義 或者這篇文章提供了另外一種方法。二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有 縫隙 以下面的二維陣列 a 為例 int a 3 4 從概念上理解,a 的分布像乙個矩陣 0 1 2 3 4...

C C 指向二維陣列的指標

設有整型二維陣列a 3 4 如下 0 1 2 3 4 5 6 7 8 9 10 11 它的定義為 int a 3 4 設陣列a的首位址為1000,各下標變數的首位址及其值如圖所示。c語言允許把乙個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a 0 a 1 a 2 每乙個一維陣...