關於C 中的二維陣列的使用和注意事項

2021-10-10 03:47:37 字數 2873 閱讀 8226

之前在一維陣列的時候,超市老闆統計了各個商品的**,並且按一定順序排列下去,但是現在要優化,有準確統計出到底是那乙個商品架上的第幾個商品,那麼肯定會出現這種情況,沐浴露在x號架-第x位,之前的統計表只能說是第x號的商品,現在通過改造後使得管理商品更加方便、更易於對商品定位,而且在統計更大的、需要清晰體現的資料時,這種方法往往會體現出一定的優點。

要說二維的話我們可以先從一維說起,一維可以看成是一條數軸:

既然在a陣列中的每乙個元素可以是除了void型別以外的資料型別,那我可不可以是乙個陣列,即乙個一維陣列裡面的每個元素都是一維陣列,這樣的:

所以定義乙個二維陣列的格式是這樣:資料型別 陣列名[列數][行數](有些書籍可能是 [行數]在前);或者也可以這樣定義:

#include

using

namespace std;

intmain()

///這裡補充一下,一維陣列也可以這樣定義:

#include

using

namespace std;

intmain()

/

上面用typedef定義二維陣列的例子,可以看成兩個一維經過組合成二維陣列。

定義了二維陣列後,系統也會為它分配一塊連續的記憶體空間,所以例如int型別的二維陣列a[m][n](其中m、n必須是常量表示式)佔的記憶體空間大小的計算方法如下:

sizeof

(a);

或m *

sizeof

(a[0])

;或m* n *

sizeof

(int

);

此計算二維陣列所佔記憶體大小的方法和計算一維陣列所佔記憶體大小的方法類似,可以參考我的部落格中的文章《c++的一維陣列》。

二維陣列的初始化與一維陣列的初始化類似,也用初值表,分兩種初始化方式,一是巢狀初值表;二是線性初值表:

/一,下面是巢狀初值表:

#include

using

namespace std;

intmain()

,,};

//定義並初始化了乙個是m型別的陣列n,這時n就是乙個二維陣列了,相當於 int n[3][5].

}

在二維陣列a[m][n]中,m為高維元素個數,n為低維元素元素:

int a[

3]=,

};//省略了高維元素個數

只有高維元素個數可以省略,低維元素個數不可以省略。省略了高維元素個數時,其高維元素個數就是{}裡面{}的個數,和一維陣列省略了常量表示式一樣。

/二,下面是線性初值表:

int a[2]

[3]=

;//初始化了全部元素

int b[

3]=;

上面第乙個初始化語句中,高維元素個數和低維元素個數都有標明,則初始表中最多能新增的元素個數是2*3=6;

上面第二個初始化語句中,高維元素被省略了,則 高維元素個數=向上取整(線性初始表元素個數/低維元素個數) (向上取整是不小於其的最小整數)例如 int i[3]=;的改為元素個數為2

///二維陣列的訪問格式:

陣列名[下標m]

[下標n]

;

下標都是從0開始,a[m][n]表示取得第m個陣列中的第n個元素;

若定義陣列a[m][n],則有 第一維大小為n,第二維大小為m,

所以a[i][j]的排列位置為 第一位大小ni+j+1;

a[i][j]的位址為 a的起始位址+(第一維大小ni+j)*sizeof(資料型別)

陣列的位址只可以讀取,二維陣列a[m][n]的位址表示式:

a[

0]和a //為陣列a的起始位址,即a[0][0]的位址

a[i]

//為陣列的第i+1行的位址,即a[i][0]的位址

a[i]

+j //為陣列的第i+1行的第j+1元素的位址,即a[i][j]的位址

a+k //為陣列的第k+i行的位址,即a[k][0]的位址

位址的讀取也可以用&識別符號如 a[i][j]的位址可以是:&a[i][j];

當然陣列也可以是其他資料型別(除了void型別)。

///當然乙個一維陣列的元素也可以是二維陣列,這樣就是構成了三維陣列。

類似地可以構成多維陣列。

這裡就簡單說一下三維陣列,其實三維及以上的多維陣列很少用到,二維在多數情況下也夠用了。

三維陣列可以這樣理解:大學有很多棟宿舍樓,宿舍樓有很多層,每層有很多的房間,比如說 一間宿舍可以這樣精確表示:一號宿舍樓的四層的六號房,在這裡面就包含了三維關係。所以這樣理解三維陣列的話可能就容易點。

定義三維陣列的方法有兩種:

一、int a[2][3][5];//這樣子也可以這樣理解為 兩棟宿舍樓,每一棟都有三層,每一層都有5個房間,這樣每乙個房間就存放乙個元素,所以總的元素有235=30個;

二、

typedef

int a[3]

[5];

a b[2]

;

C 中的二維陣列

二維陣列在計算機中儲存時,是按照行形式儲存的。即把每一行看做乙個整體,然後再把每一行的首位址進行索引,這樣就變成了乙個儲存著每行首位址的一維陣列。例如對於二維陣列num 2 2 可以理解為是乙個一維陣列p,這個一維陣列p有兩個元素,分別為num 0 與num 1 num 0 儲存著num陣列第一行的...

C 中的二維陣列

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

一維陣列和二維陣列的使用

1.一維陣列的建立與初始化 陣列的建立 float arr 5 5個浮點型的陣列 int arr 120 120個整型的陣列 char arr 20 20個字元型的陣列 1 其中的是解引用操作符,它的運算元有兩個 乙個陣列名 乙個索引值。陣列的建立一定要包括型別名,如上面 的 float int c...