C 中的二維陣列

2021-08-14 05:11:23 字數 1467 閱讀 7305

二維陣列在計算機中儲存時,是按照行形式儲存的。即把每一行看做乙個整體,然後再把每一行的首位址進行索引,這樣就變成了乙個儲存著每行首位址的一維陣列。

例如對於二維陣列num[2][2]=;可以理解為是乙個一維陣列p,這個一維陣列p有兩個元素,分別為num[0]與num[1],num[0]儲存著num陣列第一行的首位址,num[1]儲存著第二行的首位址。

int num[2][2]=;

cout<

cout<

輸出結果為1,3.分別是第一行與第二行的首元素。

二維陣列用指標索引的方法有兩種,一種是實用一維指標int *進行索引,一種是使用二維陣列指標int (*)[2]進行索引,具體使用見**。

1. 一維指標進行索引

int num[2][2]=;

int *p1=num[0];

cout<

cout<

定義乙個一維指標p1,把二維陣列當做一維陣列去進行索引,可以如第3行,通過指標索引,也可以如第4行,通過陣列索引。

需要注意的一點,第二行num[0]可以看做是這個二維陣列的起始位址。不可以使用int *p=num;這樣的賦值方式,因為num是乙個二維陣列指標。可以通過指標型別強制轉化,進行賦值:int *p=(int *)num

2. 二維陣列指標進行索引

int num[2][2]=;

int (*p2)[2];

p2=num;

cout<

cout<

定義乙個陣列指標p2,p2的列數必須與指向的二維陣列列數相同。這裡必須給int (*p2)[2]加括號,因為的優先順序是大於*的優先順序。具體可以參考我的另一篇部落格:

陣列指標可以像陣列名一樣,使用下標或者指標增加來進行索引。

總結:其實無論是方式1還是方式2,二維陣列在記憶體中都是順序儲存的。因此不同的索引方式只是索引規則的不同而已,遵循一維指標及陣列指標的使用方法即可正常索引。可以通過使用指標型別強制轉換來實現方式1與方式2的轉化。

二維陣列做函式引數:

根據之前的介紹,二維陣列函式引數可以有一下幾種方式

1.func(int num[2][2]);

2.func(int num[2]);

3.func(int (* p2)[2]):

4.func(int * p1)

需要注意的是,第1,2種方式是直接用二維陣列做形參,二維陣列做形參時,列數必須寫出來,而行數不是必須的。第3種方式是使用陣列指標的方式來作為函式形參。以上三種方式都可以在func中使用num[i][j]或者*(*(num+i)+j)的方式進行索引。第4種方式是使用一維指標的形式來代替二維陣列,這種方式在使用時要注意,實際的func在呼叫的時候,需要對二維陣列實參進行指標型別強制轉換。使用這種方式時,func內只能使用p1[i]和*(p1+i)的方式索引值。

C 中的二維陣列

在記憶體中的資料只能是一維的,對於二維陣列在記憶體中是以開闢連續的記憶體空間,陣列名就是二維陣列陣列名就是記憶體空間的手位址,和函式 變數一樣其名就是記憶體中的首位址,下面是最近學的二維陣列的用法。1 和c語言一樣的方法 這種方法陣列大小不能太大,否則會出錯。int main for i 0 i2 ...

C 二維陣列

c 二維陣列 微學苑 具有兩個下標的陣列稱為二維陣列。有些資料要依賴於兩個因素才能惟一地確定,例如有3個學生,每個學生有4門課的成績,顯然,成績資料是乙個二維表,如書中表5.1所示。表5.1 學生成績資料表 學生序號 課程1課程2 課程3課程4 課程5學生1 8578 9996 88學生2 7689...

C 二維陣列

c 二維陣列 微學苑 具有兩個下標的陣列稱為二維陣列。有些資料要依賴於兩個因素才能惟一地確定,例如有3個學生,每個學生有4門課的成績,顯然,成績資料是乙個二維表,如書中表5.1所示。表5.1 學生成績資料表 學生序號 課程1課程2 課程3課程4 課程5學生1 8578 9996 88學生2 7689...