6.4 多維陣列

圖 6-2:二維陣列的記憶體佈局

有時資料是「表格」的形狀。例如棋盤有 8×8 的格子,答題卡有 N 行 M 列的選項。一維陣列放不下這種二維結構,所以我們需要多維陣列

二維陣列的宣告:

int a[3][4];  // 3 列 4 欄的整數表格

你可以想像成:

  • 3 個陣列,每個陣列有 4 個元素
  • 訪問方式:a[列][欄],例如 a[0][2] 是第 0 列第 2 欄

索引範圍:

  • 列的索引:0 ~ 2
  • 欄的索引:0 ~ 3

三維及以上:

int cube[5][5][5];      // 5×5×5 的立方體
char matrix[10][20];    // 10×20 的字元矩陣

範例程式碼

#include<iostream>
using namespace std;
int main() {
    // 宣告一個 3 列 4 欄的陣列
    int a[3][4];

    // 用巢狀迴圈填充
    // 外層迴圈:走訪每一列
    // 內層迴圈:走訪該列的每一欄
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            a[i][j] = i * 4 + j;  // 填充 0, 1, 2, ..., 11
        }
    }

    // 輸出矩陣
    cout << "Matrix:\n";
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            cout << a[i][j] << " ";
        }
        cout << '\n';
    }

    return 0;
}

執行結果:

Matrix:
0 1 2 3
4 5 6 7
8 9 10 11

動手試試看:把程式碼改成讀入一個矩陣,然後輸出它的轉置(列變欄,欄變列)。