多次元配列の利用

C 言語の配列では指定した同じデータ型の値を要素に格納することができますが、配列を要素として格納する多次元の配列を作成することができます。ここでは C 言語で多次元の配列を作成する方法について解説します。

(Last modified: )

多次元配列の利用

配列には同じデータ型の値を要素として管理できますが、配列そのものを要素として持つ配列を作成することができます。何次元でもできますがよく利用される 2 次元を例に考えてみます。

2 次元配列の書式は次の通りです。

データ型 配列名[要素数1][要素数2];

配列と単に書いた場合は1次元の配列です。 1 次元の配列の場合は「配列名[添字]」でそれぞれの要素を表しますが、 2 次元の場合は「配列名[添字][添字]」で各要素を表します。

具体的には次のように記述します。

int seiseki[2][3];

seiseki[0][0] = 72;
seiseki[0][1] = 67;
seiseki[0][2] = 84;

seiseki[1][0] = 67;
seiseki[1][1] = 92;
seiseki[1][2] = 71;

2 次元配列を使う意味を考えてみます。例えば 6 日間の運動した時間を管理するのではあれば 1 行に列挙して管理するのが便利ですし、 3 教科の成績を 2 人分管理するのであれば表形式で管理した方が便利です。成績と名前などのように 2 つの異なるインデックスを使って要素を特定した方が便利な場合には 2 次元配列が有効です。

なお今回は 2 次元の例でしたが 3 次元でも 4 次元でも可能です。その場合は次のような書式となります。

データ型 配列名[要素数1][要素数2][要素数3];
データ型 配列名[要素数1][要素数2][要素数3][要素数4];

3 次元までは利用することもありますが、 4 次元以上の多次元配列ともなるとあまり利用する機会はありません。

2次元配列の初期化

2 次元配列の場合でも宣言と同時に初期値を設定することができます。次の書式を使います。

データ型 配列名[要素数1][要素数2] = {{値00, 値01, ...}, {値10, 値11, ...}, ...};

少し分かりにくいですが上記は次のように記述したものと同じです。

データ型 配列名[要素数1][要素数2];

配列名[0][0] = 値00;
配列名[0][1] = 値01;
...


配列名[1][0] = 値10;
配列名[1][1] = 11;
...

...

要素数 2 の配列があたかも 1 つの要素のように、要素数 1 の分だけあるような形で指定します。具体的には次のように記述します。

int seiseki[2][3] = {{72, 67, 84}, {67, 92, 71}};

この場合は次のように記述した場合と同じです。

int seiseki[2][3];

seiseki[0][0] = 72;
seiseki[0][1] = 67;
seiseki[0][2] = 84;

seiseki[1][0] = 67;
seiseki[1][1] = 92;
seiseki[1][2] = 71;

要素数を指定せずに初期化する

配列は宣言と同時に初期化する場合は要素数を省略できました。 2 次元配列の場合でも最初の配列の要素数は省略が可能となっています。

データ型 配列名[][要素数2] = {{値00, 値01, ...}, {値10, 値11, ...}, ...};

具体的には次のように記述します。

int seiseki[][3] = {{72, 67, 84}, {67, 92, 71}};
サンプルコード

では簡単なサンプルプログラムを作成して試してみます。

#include <stdio.h>

int main(void){
  int seiseki[][3] = {{72, 67, 84}, {67, 92, 71}};
  int i;

  for (i = 0 ; i < 2 ; i++){
    printf("%d人目の成績です\n", i + 1);
    printf("算数の点数は%dです\n", seiseki[i][0]);
    printf("国語の点数は%dです\n", seiseki[i][1]);
    printf("社会の点数は%dです\n", seiseki[i][2]);
  }

  return 0;
}

上記を「test5-1.c」の名前で保存します。まずコンパイルを行います。

多次元配列

コンパイルが終わりましたら「test5-1」と入力して実行します。

多次元配列

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。