C 二維陣列講解 二維陣列的宣告和初始化

2021-09-28 20:29:01 字數 2077 閱讀 4589

我們知道,一維空間是一條線,數學中用一條數軸來表達;二維空間是乙個平面,數學中用平面座標系來表達。那麼二維陣列又是什麼樣的呢?

線與面我們用乙個下標來描述一維陣列中的某個元素,就好像在用數描述一條線上的點。而所有的資料都是儲存在一條線上。如果我們採用兩個下標,就能形成乙個平面,猶如一張**,有行有列,所有的資料就能夠存放到**裡。

我們把二維陣列的兩個下標分別稱為行下標和列下標,在前面的是行下標,在後面的是列下標。

那麼什麼時候要用二維陣列呢?一般有兩種情況,一種是描述乙個二維的事物。比如用1表示牆,用0表示通路,我們可以用二維陣列來描述乙個迷宮地圖;用1表示有通路,0表示沒有通路,我們可以用二維陣列來描述幾個城市之間的交通情況。還有一種是描述多個具有多項屬性的事物。比如有多個學生,每個學生有語文、數學和英語三門成績,我們就可以用二維陣列來描述。

對於第二種情況,我們要注意各項屬性應該是同一種資料型別,比如三種學科的成績都是整數。如果出現了姓名(字串屬性),就不能將他們組合到乙個二維陣列裡去。所以不要企圖將不同資料型別的屬性整合到乙個二維陣列中去。

二維陣列的宣告和初始化

二維陣列的宣告和一維陣列是類似的,不同之處只是多了乙個下標:

資料型別陣列名[行數][列數];

要注意,二維陣列的下標也都是從0開始的。

二維陣列的初始化分為兩種,一種是順序初始化,一種是按行初始化,我們來看一段程式,就能夠對它們有所了解了:(程式7.4.1)

#include 「iostream.h」

#include 「iomanip.h」

int main()

;//順序初始化

int array2[3][2]=,,};//按行初始化

cout <<「array1」 《執行結果:

array1

4 25 6

13 4

array2

4 25 8

6 8我們可以看出,所謂按順序初始化就是先從左向右再由上而下地初始化,即第一行所有元素都初始化好以後再對第二行初始化。而按行初始化則是用一對大括號來表示每一行,跳過前一行沒有初始化的元素,在行內從左向右地進行初始化。對於沒有初始化的元素,則都是乙個不確定的值。

省略第一維的大小

我們在第一節學到,一維陣列的大小可以省略。可是二維陣列的元素個數是行數和列數的乘積,如果我們只告訴電腦元素個數,電腦無法知道究竟這個陣列是幾行幾列。所以,c++規定,在宣告和初始化乙個二維陣列時,只有第一維(行數)可以省略。比如:

int array[3]=;

相當於:

int array[2][3]=;

二維陣列在記憶體中的儲存情況

先前已經說明,記憶體是依靠位址來確定記憶體中的唯一乙個儲存單元的,即只有乙個引數。所以在記憶體中,所有的資料都是像一維陣列那樣順序儲存的。那麼具有兩個下標的二維陣列是怎樣存放到記憶體中的呢?

在記憶體中,先將二維陣列的第一行按順序儲存,接著就是第二行的資料,然後是第三行的資料……右圖(圖7.4)所示的就是乙個二維陣列在記憶體中的儲存情況。

向函式傳遞二維陣列

我們知道,陣列作為引數傳遞給函式的是陣列首元素的位址。對於二維陣列來說亦是如此。不過有兩個問題,乙個是我們必須讓函式知道行數和列數,這就像我們要讓函式知道一維陣列的大小一樣,防止發生越界訪問。另乙個就是我們必須讓電腦知道這個二維陣列是怎樣的乙個**,即必須告知陣列的列數。這和只能省略二維陣列的行數道理是一樣的。下面我們就來看乙個向函式傳遞二維陣列的程式:

#include 「iostream.h」

#include 「iomanip.h」

void disp(int a[2],int r,int c);//告知陣列的列數

int main()

;cout <<「array」 《執行結果:

array

4 25 6

3 1二維陣列轉化成一維陣列

有些時候,我們覺得用二維陣列來描述一樣事物很方便。比如我們用二維陣列來畫乙個迷宮地圖,行下標和列下標就如同直角座標系一樣。可是在某些情況下,不能使用二維陣列,或者難以製造乙個二維陣列。二維陣列在記憶體中的儲存情況和一維陣列是相同的,所以我們只好用乙個一維陣列來代替它了。

於是,我們不難總結出乙個結果,乙個二維陣列元素a[x][y]在一維陣列b中,是:

a[x][y]=b[x*列數+y]

C 二維陣列講解 二維陣列的宣告和初始化

我們知道,一維空間是一條線,數學中用一條數軸來表達 二維空間是乙個平面,數學中用平面座標系來表達。那麼二維陣列又是什麼樣的呢?我們用乙個下標來描述一維陣列中的某個元素,就好像在用數描述一條線上的點。而所有的資料都是儲存在一條線上。如果我們採用兩個下標,就能形成乙個平面,猶如一張 有行有列,所有的資料...

zt C 二維陣列講解 二維陣列的宣告和初始化

定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通過其位址間接地訪...

二維陣列 二維陣列和指標

include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...