C言語

多次元配列の基本

配列とは」では、データを1列に並べて管理する仕組みを学びました。
今回は、それを「縦と横の表」にしたものを管理する二次元配列や、「X軸、Y軸、Z軸」などの三次元配列といった多次元配列について解説します。

多次元配列の仕組み

多次元配列の宣言は次のような構文に書きます。

型 配列名[要素数(行)][要素数(列)];

例えば、次のように宣言をすると、

int test[2][4];

この配列は、2行×4列=8個の int 型の値を記憶できます。

また、三次元配列になると、次のように[ ] が1つ増えます。

int test[2][4][3];

多次元配列の代入

多次元配列に値を代入するには、次のように書きます。

test[0][0] = 10;
test[0][1] = 20;
test[0][2] = 30;
test[0][3] = 40;
test[1][0] = 50;
test[1][1] = 60;
test[1][2] = 70;
test[1][3] = 80;

添字は、[行番号][列番号]の順で指定します。
どちらの添字も0から始まることに注意しましょう。

多次元配列の初期化

多次元配列は、宣言と同時に初期化することもできます。

型 配列名[要素数(行)][要素数(列)] = { 
  { 値1-1, 値1-2, ... }, // 1行目
  { 値2-1, 値2-2, ... }  // 2行目
  };

多次元配列の代入のプログラムを初期化で表すと、次のようになります。

int test[2][4] = {
  { 10, 20, 30, 40 },
  { 50, 60, 70, 80 }
};

最初の [ ] が「行」、次の [ ] が「列」を表しています。
このように書くと、表のような形でデータを整理できます。

多次元配列の出力

配列の中身を順に表示するには、for文を入れ子(ネスト)にして使います。

#include <stdio.h>

int main(void)
{
  int i;
  int j;
  int test[2][4] = {
    { 10, 20, 30, 40 },
    { 50, 60, 70, 80 }
  };
  
  for(i = 0; i < 2; i++) {
    for(j = 0; j < 4; j++) {
      printf("test[%d][%d] = %d\n", i, j, test[i][j]);
    }
    printf("\n");
  }
  
  return 0;
}

プログラムの説明

  1. int test[2][4] = { { 10, 20, 30, 40 }, { 50, 60, 70, 80 } }; で2行×4列のデータを配列にまとめて代入しています。
  2. for(i = 0; i < 2; i++) で変数 i を0~1まで変化させています。
  3. for(j = 0; j < 4; j++) で変数 j を0~3まで変化させています。
  4. test[i][j] で添字を変数 ij にすることで、添字が[0][0]、[0][1]、[0][2]、[0][3]、[1][0] ...と変化することで、test[0][0]test[1][3] の配列の中の全ての値を順に取り出しています。

プログラムの実行結果は次の通りです。

test[0][0] = 10
test[0][1] = 20
test[0][2] = 30
test[0][3] = 40

test[1][0] = 50
test[1][1] = 60
test[1][2] = 70
test[1][3] = 80

まとめ

  • 多次元配列は、表(行と列)や立体(X軸、Y軸、Z軸)のようにデータを管理できる仕組み
  • 宣言は 型 配列名[行数][列数]; のように書く
  • 添字は [行番号][列番号] の順で指定し、どちらも0から始まる
  • 初期化では { {値1, 値2, ...}, {値3, 値4, ...} } のように書ける
  • for 文を2つ組み合わせると、すべての要素を順に処理できる

-C言語