七十八)巢狀和二維陣列

2021-09-23 23:31:39 字數 3559 閱讀 1240

例如int a[5]是一維陣列,他是由a[0]、a[1]、a[2]、a[3]、a[4]這五個int型別的陣列組成的。

如果放到excel裡面,那麼就是:

a[0]

a[1]

a[2]

a[3]

a[4]

這樣乙個樣子,一維表示線。

一維陣列的表示方法可以理解為:

變數名[橫座標x]

x初始為0,表示原點

假如**從線到面,就公升格為二維。

二維陣列的的特點是既有橫座標,又有縱座標。宣告格式為:

int 變數名[縱座標y][橫座標x]

表示每行有x個元素,每列有y行。

例如int a[3][4],放在**裡的表現形式為:

a[0][0]

a[0][1]

a[0][2]

a[0][3]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]

注意:之所以這麼寫,是因為在初始化的時候,先初始化第0行(實際上的第一行),再初始化第1行,再初始化第2行等。

二維陣列可以這麼理解;

先有陣列a[x],然後這個陣列裡就有x個元素;

然後在陣列a[x]的基礎上,由y個a[x]陣列組成的a[y][x]陣列,於是就有a[y][x]——相當於是雙重陣列,第乙個陣列有4個成員,第二個陣列有3個成員(且這3個成員每個都有4個成員);

假如分別初始化a[0]={}; 中括號裡面的0,指的是y座標,因此初始化的是第y+1行上的x座標成員

例如將int a[3][4]進行初始化的**如下:

//初始化二維陣列

#includeint main()

, //第一行,注意,一行以大括號包圍,大括號以逗號為結尾。

, //之所以以逗號為結尾,是因為陣列成員之間以逗號為間隔,

, //若將乙個大括號內的4個元素整體看做乙個大陣列的成員,那麼這個大陣列有三個成員

}; cout << "a[0][0] = " << a[0][0] << endl; //輸出大陣列第乙個成員中(第一行)的小陣列第乙個成員(第一列)

cout << "a[0][1] = " << a[0][1] << endl; //輸出大陣列第乙個成員中(第一行)的小陣列第二個成員(第二列)

cout << "a[1][0] = " << a[1][0] << endl; //第二行,第一列

cout << "a[2][3] = " << a[2][3] << endl; //第三行,第四列

system("pause");

return 0;

}

輸出:

a[0][0] = 0

a[0][1] = 0.1

a[1][0] = 1

a[2][3] = 2.3

請按任意鍵繼續. . .

總結:①我覺得可以將二維陣列理解為乙個excel**,只不過excel**的初始橫縱座標都是1,而二維陣列的初始橫縱座標是0。

②座標輸出是先橫行,再縱列——先橫後豎。

③二維陣列不僅支援int型別,也支援double型別,可以推斷,也會支援char、string型別等。

**:

//驗證二維陣列支援string型別

#include#includeint main()

, ,

, };

cout << "a[0][0] = " << a[0][0] << endl; //輸出大陣列第乙個成員中(第一行)的小陣列第乙個成員(第一列)

cout << "a[0][1] = " << a[0][1] << endl; //輸出大陣列第乙個成員中(第一行)的小陣列第二個成員(第二列)

cout << "a[1][0] = " << a[1][0] << endl; //第二行,第一列

cout << "a[2][3] = " << a[2][3] << endl; //第三行,第四列

system("pause");

return 0;

}

輸出:

a[0][0] = 八

a[0][1] = 一

a[1][0] = 三

a[2][3] = 下

請按任意鍵繼續. . .

④因為有二維陣列,可以推斷也有三維陣列,或許也有四維陣列。

格式類似,即 型別名 變數名

[z][y][x]。然後每乙個陣列初始化結束後,用大括號括起來。

**:

//驗證有三維陣列

#include#includeint main()

, //y座標第一行中的x座標第1~4個

, //y座標第二行

,}, //以逗號結尾,因為可以把a[y][x]看成乙個更大的陣列中的乙個成員

, ,,},

}; cout << "a[0][0][0] = " << a[0][0][0] << endl; //輸出z=0,y=0,x=0——注:=0為第一行,依次類推

cout << "a[0][0][1] = " << a[0][0][1] << endl; //輸出z=0,y=0,x=1

cout << "a[1][1][0] = " << a[1][1][0] << endl; //輸出z=1,y=1,x=0

cout << "a[1][2][3] = " << a[1][2][3] << endl; //輸出z=1,y=2,x=3

system("pause");

return 0;

}

輸出:

a[0][0][0] = 0

a[0][0][1] = 1

a[1][1][0] = 110

a[1][2][3] = 123

請按任意鍵繼續. . .

⑤假如二維/三維陣列的值是有規律的,例如跟三維座標有關,於是可以利用for來給陣列賦值:

**:

#include#includeint main()

} }//邏輯是先判斷z,然後判斷y,然後判斷x,這個時候,三個座標都有確切陣列了,於是根據演算法,a[z][y][x]就有確切數值了

cout << "a[0][0][0] = " << a[0][0][0] << endl; //輸出z=0,y=0,x=0——注:=0為第一行,依次類推

cout << "a[0][0][1] = " << a[0][0][1] << endl; //輸出z=0,y=0,x=1

cout << "a[1][1][0] = " << a[1][1][0] << endl; //輸出z=1,y=1,x=0

cout << "a[1][2][3] = " << a[1][2][3] << endl; //輸出z=1,y=2,x=3

system("pause");

return 0;

}

輸出和未使用for的是一樣的

二維陣列 二維陣列和指標

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

二維指標和二維陣列

二維指標和二維陣列有三種形式 1,type ptr 2,type ptr或者type prt 3,type prt 三種形式意思相近,也有區別。首先三種形式都能表示二維的資料結構。1,type ptr 表示乙個指向指標的指標 但是在一開始宣告的時候 type ptr ptr到底指向幾個指標是不知道的...

二維陣列和二維陣列名

對於一位陣列我們認識到其資料元素在記憶體中是按線性順序依次排列的,且一維陣列名的值是乙個指標常量。那麼二維陣列在記憶體中又是怎麼儲存的,其陣列名又有什麼含義呢?定義乙個二維陣列 int arr 3 4 我們可以將乙個二維陣列看做是乙個其中元素為陣列的乙個一位陣列,也就是說二維陣列第一維的元素實際上是...