二維陣列的宣告、初始化和一維陣列非常像
假設有一個二維整數陣列它的維度是 m*n, 基本的宣告為 int a[m][n]
當然,這種陣列的初始化的話還是必須要靠二個loop去完成
有辦法像一維陣列一樣,在宣告的時候就給它初始化嗎?
有!以下先提出幾個重要的注意事項
(1) 如果要所有的陣列元素都設為0的話:
int a[2][3] = { {0},
{0}, } // 二列,所以分二行寫
(2) 若不是的話,要進行基本設定,如下示:
int a[2][3] = { {1,2,3},
{4,5,6} }; //二列,分二行,三行,每列三個元素 (2*3)
(3) 如果是 int a[][3] 這種設定的話
(3.1) 所有元素個數總合 , cnt = sizeof(a) / sizeof(a[0][0]);
(3.2) 取得陣列的列數, row_cnt = sizeof(a)/sizeof(a[0]);
(3.3) 取得陣列的行數, col_cnt = sizeof(a[0])/sizeof(a[0][0]);
以下的範例程式碼僅供參考...
// =======================================
// FileName:TwoDim.cpp
// Author:Edison.Shih.
#include <iostream.h>
int main(int argc, char **argv)
{
int i=0, j=0;
int cnt=0; // 元素總數
int row_cnt=0; // 列數
int col_cnt=0; // 行數
// 宣告與初始
int a1[2][3] = { {1,2,3},
{4,5,6}};
int a2[2][3] = { {1,2},
{4}};
int a3[][3] = { {1,2,3},
{4,5,6}};
// 顯示陣列a1內容
cout << endl << "a1:" << endl;
for(i=0; i<2; i++){
for(j=0; j<3; j++) cout << a1[i][j] << " ";
cout << endl;
}
// 顯示陣列a2內容
cout << endl << "a2:" << endl;
for(i=0; i<2; i++){
for(j=0; j<3; j++) cout << a2[i][j] << " ";
cout << endl;
}
// 顯示陣列a3內容
cout << endl << "a3:" << endl;
for(i=0; i<2; i++){
for(j=0; j<3; j++) cout << a3[i][j] << " ";
cout << endl;
}
cnt = sizeof(a3)/sizeof(a3[0][0]);
row_cnt = sizeof(a3)/sizeof(a3[0]); // row_cnt = cnt/col_cnt;
col_cnt = sizeof(a3[0])/sizeof(a3[0][0]);
cout << endl;
cout << "cnt = " << cnt << endl;
cout << "row_cnt = " << row_cnt << endl;
cout << "col_cnt = " << col_cnt << endl;
return 0;
}
// =======================================
執行結果如下所示..
a1:
1 2 3
4 5 6
a2:
1 2 0
4 0 0
a3:
1 2 3
4 5 6
cnt = 6
row_cnt = 2
col_cnt = 3
// =======================================
同理的, 三維陣列的宣告方式,但看起來複雜些,
熟悉後其實就能熟輕駕熟
int a[2][3][4];
int a[2][3][4] = { { {1,2,3,4},
{5,6,7,8},
{9,10,11,12}
},
{ {1,2,3,4},
{5,6,7,8},
{9,10,11,12}
}
};
仔細觀查,有二個集合(用這個名詞很不恰當),所以用大括號再括起來
每個集合裡面有三列,每列裡面有四個元素..
這可用立體圖表示出來,有心者可再參考相關書目的圖解方式