二維陣列和陣列元素位址

2021-08-04 12:18:14 字數 1342 閱讀 4244

二維陣列和陣列元素的位址

先給出一下定義:

int *p,a[3][4];

1.二維陣列a由若干個以為陣列組成

像上面定義的陣列a,我們可以理解為由a[0],a[1],a[2]三個元素組成,而他們有分別是乙個一維陣列

通過我們前面學過的知識可以知道,陣列名是乙個位址,其值是第乙個元素的位址,而此位址的基型別就是陣列元素的型別,而二維陣列中同樣a[0],

對於有乙個指標變數p的基型別與a[i]相同,則p=a[i]這是正確的。

2.二維陣列名也是乙個位址常量

二維陣列名同樣也是乙個存放位址常量的指標,其值為二維陣列中的第乙個元素的位址。以上a的值與a[0]的值是相同的。

a[0] a+0 第0行的首位址

a[1] a+1 第1行的首位址

象他們這樣的,還有兩位乙個名稱---行位址。所以二維陣列名應理解為乙個行指標。

3.二維陣列元素的位址

int a[3][4];

&a[i][j];

a[i]+j;

*a(a+i)+j;

&a[0][0]+4*i+j;

a[0]+4*i+j;

a 陣列元素 可以用以下五種表示式來引用:

a[i][j];

*(a[i]+j);

*(*(a+i)+j);

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

*(&a[0][0]+4*i+j)

通過建立乙個指標陣列引用二維陣列元素

int*p[3], a[3][2] ,i,j // 指標陣列

說明符*p[3],中也遵照運算子的優先順序,一對的優先順序高於*號,因此p首先與結合,構成*p[3],說明了p是乙個陣列名,系統將他開闢了3個連學的儲存單元,在他前面*號則說明了陣列p是指標型別,他的每個元素都是基本型別為int 的指標。

如有:for(i = 0, i<3;i++)

p[i] = a[i];

這就意味著每個指標都指向了a陣列的每行的開頭。

所以對於陣列a的元素,我們也通過這樣的指標來表示了

通過建立乙個行指標引用二維陣列元素

若有以下定義:

int a[3][2] ,(*prt)[2] //列標必須對應

為什麼要先加乙個()?這是因為想要 prt 與 * 先結合,說明prt是乙個指標變數。然後再也[2]結合,說明指標變數prt的基本型別是乙個包含有開那個給int元素的陣列。

因為prt與a的型別相同所以prt = a 就是乙個合法表示式。當prt指向啊陣列的開頭時,可以通過以下形式來引用

a[i][j];

*(prt[i]+j);

*(*(prt+i)+j);

(*(prt+i))[j];

prt[i][j];

二維陣列元素的位址

一維陣列元素的位址大家都比較容易理解,但對於二維陣列,就很容易搞混了.今天我又被這個問題給弄糊塗了,翻了翻老譚的書本,對這個問題有了更深的認識.首先給出乙個二維陣列a,它的定義為 int a 3 4 a陣列包含3個行元素,a 0 a 1 a 2 而每個行元素又是乙個一維陣列,它包含4個元素.從二維陣...

二維陣列元素的位址

一維陣列元素的位址大家都比較容易理解,但對於二維陣列,就很容易搞混了.今天我又被這個問題給弄糊塗了,翻了翻老譚的書本,對這個問題有了更深的認識.首先給出乙個二維陣列a,它的定義為 int a 3 4 a陣列包含3個行元素,a 0 a 1 a 2 而每個行元素又是乙個一維陣列,它包含4個元素.從二維陣...

二維陣列和陣列指標

二維陣列的基本概念在這裡不在多提,即他的定義和特點。先從二維陣列的輸出來說吧。二維陣列的輸出 int main for int i 0 i 3 i printf n 二維陣列的逆置即本來的 行換成列,列換成行,這個很簡單我們看來看一下 和結果 int main for int i 0 i 3 i p...