5-3 多次元配列

この記事は約3分で読めます。

2次元配列

変数をいくつか並べたものが配列ですが配列自体もいくつか並べると配列になります。つまり配列の配列を作ることができます。これを2次元配列といいます。2次元配列を定義するときは2つの要素数が必要で、アクセスする時も添え字が2つ必要です。

#include <stdio.h>
int main(void){
	int mat[9][9],i,j;
	for (i=0;i<9;i++){
		for (j=0;j<9;j++){
			mat[i][j]=(i+1)*(j+1);
		}
	}
	for (i=0;i<9;i++){
		for (j=0;j<9;j++){
			printf("%d,",mat[i][j]);
		}
		puts("\b ");
	}
	return 0;
}

実行結果

1,2,3,4,5,6,7,8,9
2,4,6,8,10,12,14,16,18
3,6,9,12,15,18,21,24,27
4,8,12,16,20,24,28,32,36
5,10,15,20,25,30,35,40,45
6,12,18,24,30,36,42,48,54
7,14,21,28,35,42,49,56,63
8,16,24,32,40,48,56,64,72
9,18,27,36,45,54,63,72,81

要素数及び添え字が二つ必要な事以外は普通の配列や普通の変数と同様に扱うことができます。ちなみに、puts(“\b “);の\bは一文字カーソルを戻すというエスケープシーケンスです。printfで行の最後の数字の後に,を表示しているため、一文字戻ってスペースと出力し、,を消しています。

二次元配列の初期化

二次元配列初期化する時、1次元の配列と同様に初期化子を指定して初期化します。初期化子の数が足らない場合は0で初期化されます。また、適切に初期化子を書いていると最初の要素数を省略することができます。この時初期化子に合う要素数に自動で設定されます。

#include <stdio.h>
int main(void){
	int ary[2][3]={{5},{-8,3}};
	int ary2[][3]={{1,2,3},{4,4}};
	int i,j;
	puts("ary:");
	for (i=0;i<2;i++){
		for (j=0;j<3;j++){
			printf("%d ",ary[i][j]);
		}
		puts("");
	}
	puts("ary2:");
	for (i=0;i<2;i++){
		for (j=0;j<3;j++){
			printf("%d ",ary2[i][j]);
		}
		puts("");
	}
	return 0;
}

実行結果

ary:
5 0 0
-8 3 0
ary2:
1 2 3
4 4 0

実行結果のように、初期化子が足りない部分は0で初期化されます。

多次元配列

今回は二次元配列を紹介しましたが、二次元配列の配列つまり3次元配列も考えることができます。このように2次元以上の配列のことを多次元配列といいます。3次元以上の配列でも二次元の配列と同様に考えることができます。

まとめ

要素数を複数個指定すると、2次元以上の高次元配列を使用することができる。

コメント