二維陣列和陣列元素的位址
先給出一下定義:
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...