「配列とは」では、データを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;
}プログラムの説明
int test[2][4] = { { 10, 20, 30, 40 }, { 50, 60, 70, 80 } };で2行×4列のデータを配列にまとめて代入しています。for(i = 0; i < 2; i++)で変数iを0~1まで変化させています。for(j = 0; j < 4; j++)で変数jを0~3まで変化させています。test[i][j]で添字を変数iとjにすることで、添字が[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つ組み合わせると、すべての要素を順に処理できる