2次元配列の基本とネストした要素アクセス、3次元以降の考え方まで。配列の基礎を終えた人向け。
型 名前[行数][列数]; で宣言します。int a[3][4]; // 3行 × 4列 = 12個の int
a[行][列] の順でアクセスし、行も列も0始まり。a[1][2] は「2行目の3列目」= 7 です。for (int i = 0; i < 3; i++) // 外側 = 行 for (int j = 0; j < 4; j++) // 内側 = 列 printf("%d ", a[i][j]);
a[j][i] は行と列が入れ替わった全く違うアクセス。「外側が行・内側が列」と決めておくと混乱しません。int cube[2][3][4]; // 2層 × 3行 × 4列(立体的なイメージ) cube[層][行][列] // 全走査は for を3重に: for (int l = 0; l < 2; l++) for (int i = 0; i < 3; i++) for (int j = 0; j < 4; j++) cube[l][i][j] = 0;
// 3行×4列 int m[3][4] = { { 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9, 10, 11, 12} }; printf("%d\n", m[1][2]); // → 7 (1行目の2列目、0起点)
// 2層×3行×4列(立体的なイメージ) int cube[2][3][4]; for (int l = 0; l < 2; l++) for (int i = 0; i < 3; i++) for (int j = 0; j < 4; j++) cube[l][i][j] = l * 100 + i * 10 + j;
int m[3][4] = {0}; と書けば全要素0に初期化。int m[][4] = {{1,2,3,4},{5,6,7,8}}; と外側の次元だけ省略可能(列数は必須)。int m[3][4]; sizeof(m) // 48 (3 * 4 * 4バイト) sizeof(m[0]) // 16 (1行分 = 4 * 4バイト) sizeof(m[0][0]) // 4 (intひとつ) // 要素数を求めるイディオム: // 行数 = sizeof(m) / sizeof(m[0]) // 列数 = sizeof(m[0]) / sizeof(m[0][0])
int table[9][9] に九九を入れて出力せよ。table[i][j] = (i+1) * (j+1) をネストした for で埋める。int a[3][4] を適当な値で初期化し、各行の合計を求めて表示せよ(外側=行、内側=列でループ)。int A[3][4] から int B[4][3] を作り、B[j][i] = A[i][j] で行と列を入れ替えて表示せよ。この講座の理解度をチェックしましょう!
a[行][列] で行も列も0始まり。a[1] は2行目、[2] は3列目を指します。
外側=行(0〜2)、内側=列(0〜3)。行数と列数を取り違えないこと。i と j を逆にすると別の要素になります。
多次元配列の要素数は各次元の積。2 × 3 × 4 = 24個の int です。