二維陣列的宣告、初始化和一維陣列非常像

假設有一個二維整數陣列它的維度是 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}
                              }
                         };

仔細觀查,有二個集合(用這個名詞很不恰當),所以用大括號再括起來

每個集合裡面有三列,每列裡面有四個元素..

這可用立體圖表示出來,有心者可再參考相關書目的圖解方式

arrow
arrow
    全站熱搜

    Edison 發表在 痞客邦 留言(0) 人氣()