c語言指標與二維陣列

2021-10-22 04:44:22 字數 2397 閱讀 8669

歡迎關注awp資訊

二維陣列的定義和記憶體模型先來了解一下,我們還是先定義乙個二維陣列

int b[2]

[3];

先不給它賦值,考慮一下它的具體含義,這裡代表的是兩組含有3個整形資料的陣列,定義的話按照如下形式進行資料的初始化

int b[2]

[3]=,};

兩組資料,每組資料含有3個整形元素。

二維陣列的記憶體模型可以看成是這樣的

共有2個大組b[0]和b[1],每個組的大小都是12個位元組,每個組裡面有3個整形元素。

我們如果用指標來操作可以這樣定義

int (*p)[3]

= b;

定義了乙個陣列指標,這裡的p是乙個指標,指標指向了乙個陣列,陣列中有3個元素,元素型別是int型

那麼這裡我們可以根據上面定義的int (*p)[3] = b;知道指標p中存的位址對應的值是b[0] [0]的位址值。

既然已經看了陣列指標的概念,那就有必要趁熱再了解一下指標陣列,將這兩個概念區分一下,指標陣列顧名思義它代表是陣列,陣列中存的是指標,指標陣列的定義方式如下:

int

*p[3

];

首先分析一下定義的元素結合,p先和進行結合也就構成了陣列,那麼這個陣列中含有3個指標型別的元素,指向的是int型資料,這個定義也可以這樣寫int* p[3]這樣就好理解了,它對應的記憶體模型是這樣的

回到我們所討論的指標與二維陣列,我們寫如下的**,分析一下各個列印出來的值

#include

intmain

(void),

};int(

*p)[3]

= b;

printf

("b = %d,&b[0] = %d\n"

,b,&b[0]

);printf

("*b = %d,b[0] = %d\n"

,*b,b[0]

);printf

("b + 1 = %d,&b[1] = %d\n"

,b +1,

&b[1])

;printf

("*(b + 1) = %d,b[1] = %d\n",*

(b +1)

,b[1])

;printf

("*(b + 1)+2 = %d,b[1]+2 = %d\n",*

(b +1)

+2,b[1]+

2);printf

("*(*b + 1) = %d\n",*

(*b +1));}

printf(「b = %d,&b[0] = %d\n」,b,&b[0]);這裡列印的值是這個二維陣列的首位址,也就是&b[0] [0],是位址值

printf(" * b = %d,b[0] = %d\n",*b,b[0]);這裡列印的是b的其中乙個陣列中的第乙個陣列的首位址,值同上面

printf(「b + 1 = %d,&b[1] = %d\n」,b + 1,&b[1]);這裡b+1是指的增加乙個陣列的空間大小,也就到了b[1]的首位址

printf("* (b + 1) = %d,b[1] = %d\n",*(b + 1),b[1]);這裡對b+1解引用可以理解為同上面第二條分析一樣,只不過位址空間增加12個位元組,也就是b[1]的首位址

printf("* (b + 1)+2 = %d,b[1]+2 = %d\n",*(b + 1)+2,b[1]+2);順著上面分析,在b[1]位址的基礎上增加2個整形變數的空間大小,也就是b[1] [2]的位址

printf("* (* b + 1) = %d\n",* (* b + 1));這裡我們先從裡面開始看,* b是第乙個陣列中的首元素位址,+1遞增4個位元組,也就是b[0] [1]的位址,然後外面解引用得到b[0] [1]的值

我們執行後得到的結果如下:

C語言指標與二維陣列

includeint main int p 3 null p array p is same as array,the use of p is same as array.so p is the two devision pointer same as array int p1 array 0 0 ...

C語言指標與二維陣列

二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有 縫隙 以下面的二維陣列 a 為例 int a 3 4 從概念上理解,a 的分布像乙個矩陣 0 1 2 3 4 5 6 7 8 9 10 11 但在記憶體中,a 的分布是一維線性的,整個陣列占用一塊連續的記憶體...

C語言指標與二維陣列

二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有 縫隙 以下面的二維陣列 a 為例 int a 3 4 從概念上理解,a 的分布像乙個矩陣 0 1 2 3 4 5 6 7 8 9 10 11 但在記憶體中,a 的分布是一維線性的,整個陣列占用一塊連續的記憶體...