多維陣列 陣列的陣列 及指針對其訪問

2021-09-06 03:36:47 字數 2215 閱讀 8122

首先,我要說明的,在c語言中,把「多維陣列」叫做「陣列的陣列」更好理解一下。(下面我就統一稱之為「陣列的陣列」)

有的教程中喜歡將陣列的陣列用矩陣表示,不過我更趨向於直線表示,如下圖(定義陣列的陣列int ga[2][3][5]) 

我對陣列的陣列的理解(以ga[2][3][5]為例): 即為陣列的陣列,陣列裡面包含陣列,陣列作為另乙個陣列的元素。

int ga[2][3][5] = 

= ,}

= ,,

...(此處省略3個,上下乙個6個(ga_3[0]~ga_3[4])的)

};  //可能這種表達有點問題!!!歡迎指出 :)

首先,我們看一下指標和一維陣列的關係:

int one[5] = ;

int *p1=one;  //一維陣列就是這樣子的,沒錯吧?

然後,再來看看指標與二維陣列的關係:

int two[3][5] = ;

int (*p2)[5] = two;  //注意和上述一維陣列的關係和區別噢!

最後我們看看指標與三位陣列的關係:

int three[2][3][5] = ;

int (*p3)[3][5] = three;  //這下你應該總結出來了一點規律了吧?

是的,四維陣列、五維陣列、...差不多都是這樣子的。

下面開始解釋其原因:(請始終牢記「多維陣列」即是「陣列的陣列」)

1、上述三維陣列中的ga[2]可以看作一維陣列ga_1[2],其元素是ga_1[0],ga_1[1]。

2、ga_1[0]又是乙個陣列,其元素是ga_2[0],ga_2[1],ga_2[2],亦即是ga_1[0]可以表示為ga_1[0][3],同理有ga_1[1][3](請注意顏色!);

3、當然ga_2[0] 亦可以表示為ga_2[0][5],同理...;

4、總結的表示式就為上述很長的那個連等式;

5、還有問題需要注意,就是分割出來的子陣列的首指標是指向什麼位置的;

5、不知道我解釋的對不對,您能看懂麼? 歡迎指出錯誤!!!

既然上面有指標p1,p2,p3與陣列有關聯了,那麼現在開始用指針對陣列元素訪問:

p1:for

(inti=

0; i

<

5; i++)

printf(

"one[%d] = %d\n

", i, *(p

+i));

p2:inti=

0,j=0

;for

(; i

<

3; i++)

for(j=0

; j<

5; j++)

printf(

"two[%d][%d] = %d\n

", i, j, *(

*(p2+i)

+j));

p3:inti=

0,j=0

,k=0;

for(; i

<

2; i++)

for(j=0

; j<

3; j++)

for(k=0

; k<

5; k++)

printf(

"three[%d][%d][%d] = %d\n",

*(*(

*(p3+i)

+j)+k));

另外需要注意的是:

1、在*(*(*(p3+i)+j)+k)中,當執行「p3+i」的時候陣列步長為「4*3*5=60」,當執行「...+j」的時候步長為「4*5=20」,當執行「...+k」的時候步長為「4」,這裡的「4」都是指int型別所在位元組數。(關於陣列步長的概念,請大家查閱其相關資料。)

2、int (*r)[5] = ga[1]中g[1]指的是第二個ga_2[0]位址,亦即是ga[2][3][5]被看作ga_2[2]了;

int *t = g[1][1]中g[0][0]指的是第二個ga_2[1]位址,亦即是ga[2][3][5]被當作ga_1[2][3]了。

(這點可能有點難理解,建議上機操作一次。) 

ps:貌似用指標和下標訪問的多位陣列的效率是一樣的,到底使用那種方式看自己對其掌握的熟練程度。但是二者所代表的含義不一樣,請參考本博博文: 中第三篇模版裡提到的內容。

指標 多維陣列 陣列指標 指標陣列

之前對陣列的概念一直沒有理解透徹,只覺得陣列名就是個常量指標而已,用法和基本的指標差不多。所以當我嘗試用二級指標去訪問二維陣列時,就經常會出錯。下面就是剛開始寫的乙個錯誤的程式 include int main int parray null parray iarray printf array 0...

多維陣列(陣列型別,陣列指標,陣列指標型別)

陣列 int myarray100 myarray是陣列首元素位址,myarray 1 步長是四個位元組 sizeof int myarray是整個陣列的位址,myarray 1 步長是100 sizeof int 400個位元組 typedef int myarraytype 100 myarra...

c中多維陣列及陣列指標的理解

c和指標 第八章第四題 對於可指定尺寸的陣列,判斷其是否為單位矩陣。背景介紹 1.多維陣列做形參 矩陣需要用二維陣列表示,二維陣列作為形參可用以下兩種形式 void func int matrix 10 void func int matrix 10 必須指定第二維的具體數字,不可以用void fu...