[C++, CPP 教學 教程 教材 Tutorial] 進階資料型態(Advance Data Type) - 多維陣列(Multidimensional Array)
YehYeh\'s Notepad yehyeh@gmail.com 

[C++, CPP] 進階資料型態

多維陣列(Multidimensional Array)

  • 二維陣列(Two-Dimensional Array)
    • [列數][行數]=[n][m]相當於n個一維陣列,每個一維陣列含m個元素 二維陣列示意圖
    • 陣列在記憶體的儲存方式可分為以列為主(Row Major)以行為主(Column Major)
      • Row Major:要求第i列第j行的位址,可用下列公式
      • mulArray[i][j] 的位址 = 起始位址 + (單位元素大小) × [ j × m + i]
    •                             int mulArray[3][5];
                              
      多維索引 多維陣列
    • 二維陣列宣告:
      • 宣告:
        • 型態 名稱[列數][行數];
      • 宣告並以固定值初始化陣列:
        • 型態 名稱[列數][行數] = { {值11,值12,..}, ... {值n1,值n2,..} };
      • 宣告並以0初始化陣列:
        • 型態 名稱[列數][行數] = { };
        • 型態 名稱[列數][行數] = { 0 };
      • 宣告並給每個元素各別的初始值:
        • 型態 名稱[列數][行數] = {{值11, 值21,...}, {值21, 值22,...}, {值n1, 值n2,...}};
        • 型態 名稱[ ][行數 ] = {{值11, 值21,...}, {值21, 值22,...}, {值n1, 值n2,...}};
    • 存取二維陣列:
      • 名稱[索引1][索引2];
      • 名稱[索引];
    • 陣列大小計算
      • 陣列大小sizeof 陣列名稱
      • 每列大小sizeof 陣列名稱[0]
      • 列數sizeof 陣列名稱 / sizeof 陣列名稱[0]
      • 行數sizeof 陣列名稱[0] / sizeof 陣列名稱[0][0]
      • for(int i = 0; i < sizeof  mulArray / sizeof mulArray[0]; i++) {
            for(int j = 0; i < sizeof mulArray[0]/ sizeof mulArray[0][0]; j++)
                cout << mulArray[i][j] << " ";
            cout << endl;
        }
        
    • 二維陣列初始化
      • 初始化:一個n列m行的二維陣列,相當於n個一維陣列,每個一維陣列含m個元素
        • int data[2][4] = { {1, 2, 3, 4}, {5, 6, 7, 8} };
          
      • 若有省略初始值時,則會以0做初始化
        • int data[2][4] = { {1, 2 }, {5, 6, 7 } };
          int data[0][4] = { {1, 2 }, {5, 6, 7 } };
          
      • 若省略巢狀大括號,則會依記憶體儲存順序做初始化,未指派值的元素則自動以0初始化
        • int data[2][4] = {1, 2, 3, 4, 5};
          int data[ ][4] =  {1, 2, 3, 4, 5};
          
    • 二維字串陣列
      • 用雙引號括住字串時,每個字串即代表一列,不需用大括號括住
      • 多維陣列宣告時,若有指派初始值,則可省略第一個維度的大小,其餘維度不可省略
      • char  myStrings[ ][50] ={
            "Hello",
            "World",
            "C++",
        }
        cout << myStrings[0] + " "  + myStrings[1];    //Hello World
        
  • 多維陣列(Multidimensional Array)
    • 一維陣列(One-Dimensional Array):變更一個索引值,就可參考到全部元素的陣列
      • 型態 名稱[大小1]
    • 多維陣列(Multidimensional Array):需要多個索引值才能參考到全部元素的陣列
      • 型態 名稱[大小1][大小2]...[大小n]
    • 多維陣列宣告時,若有指派初始值,則可省略第一個維度的大小,其餘維度不可省略