3次元配列の初期化

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
匿名

3次元配列の初期化

#1

投稿記事 by 匿名 » 17年前

int a[2][2][2] = {
{ 0,0 },
{ 0,0 },
{ 0,0 },
{ 0,0 },
{ 0,0 },
{ 0,0 },
{ 0,0 },
{ 0,0 },
};

これを実行すると
「初期化子が多すぎる」
とでます。

int a[2][2][2] = {
0,0 ,
0,0 ,
0,0 ,
0,0 ,
0,0 ,
0,0 ,
0,0 ,
0,0
};

にするとうまくいくのですが上のほうがすっきりしているので
上のようにできないものでしょうか。

GPGA

Re:3次元配列の初期化

#2

投稿記事 by GPGA » 17年前

以下ではどうでしょうか?
int a[2][2][2] =
{
	{
		{ 0, 0 },
		{ 0, 0 }
	},
	{
		{ 0, 0 },
		{ 0, 0 }
	}
};
 

後、上も下も数値の数が多すぎます。
2x2x2なので数値の数は8個までですが
YHさんのプログラムでは16個の初期化子が定義されています。

御津凪

Re:3次元配列の初期化

#3

投稿記事 by 御津凪 » 17年前

int の総数は8(2の3乗)なので、
エラーが出るのは数値の数が多い(16個)からではないでしょうか。
後者の書き方では 0 以外の数値を入れるとエラーが出ると思います。
(もしかしたらエラーではなく警告がでるかも)

通りすがりの者

Re:3次元配列の初期化

#4

投稿記事 by 通りすがりの者 » 17年前

「匿名」という、匿名でない名前を使われているのが、
とてもおもしろい。

conio

Re:3次元配列の初期化

#5

投稿記事 by conio » 17年前

全部「0」で初期化するのであれば、

a[2][2][2] = {0};

で良いのではないでしょうか?

conio

Re:3次元配列の初期化

#6

投稿記事 by conio » 17年前

あと補足ですが、これでは{}の数が合っていないので、ただの二次元配列"a[8][2]"です
-----------------------------------------------------------------------------
int a[2][2][2] = { 
{ 0,0 }, 
{ 0,0 }, 
{ 0,0 }, 
{ 0,0 }, 
{ 0,0 }, 
{ 0,0 }, 
{ 0,0 }, 
{ 0,0 }, 
}; 
-----------------------------------------------------------------------------

要素を全部書く場合は、配列の一番左の値から順に書いていけば大丈夫だと思います。

●a[2][3][2]の場合●

①:まず、配列全体の{}を書く。
a[2][3][2] = {  };

②:一番左の数だけカッコを中に書く(この例では2個)
a[2][3][2] = { {   },{   } };

③:二番目の数だけカッコを更に中に書く(この例では3個)
a[2][3][2] = { {  {},{},{}  },{  {},{},{}  }  };

④:一番最後の数だけ要素を書く。(この例では2個。要素の間にはコンマを付ける。)
a[2][3][2] = {   { {●,●},{●,●},{●,●} },{ {●,●},{●,●},{●,●},}   };

⑤:見やすくする場合は、段落などを付ける。
int a[2][3][2] =
{
	{
		{ ●, ● },
		{ ●, ● },
		{ ●, ● }
	},
	{
		{ ●, ● },
		{ ●, ● },
		{ ●, ● },
	}
};
※a[2][2][2]の場合はGPGAさんのを見て下さい(上記参照)
多重ループのように、どんどん階層が深くなるという感じです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ついでに、カッコを書かない場合は配列の最初から順に初期化されます。
要素が足りない場合は、残りが全て「0」になります。(多い場合はエラー)

a[2][3][2]={1,2,3,4,5,6,7};

int a[2][3][2] =
{
	{
		{ 1, 2 },
		{ 3, 4 },
		{ 5, 6 }
	},
	{
		{ 7, 0 },
		{ 0, 0 },
		{ 0, 0 },
	}
};

a[0][0][0] = 1
a[0][0][1] = 2
a[0][1][0] = 3
a[0][1][1] = 4
a[0][2][0] = 5
a[0][2][1] = 6
a[1][0][0] = 7
a[1][0][1] = 0
~以下略~ 

このようになります。

wiz

Re:3次元配列の初期化

#7

投稿記事 by wiz » 17年前

Cの規格では
int a[2][2][2] = { 1,2,3,4,5,6,7,8 };
と書こうが、
int a[2][2][2] ={
{
{ 1, 2 },
{ 3, 4 }
},
{
{ 5, 6 },
{ 7, 8 }
}
};
と書こうが意味は一緒です。

box

Re:3次元配列の初期化

#8

投稿記事 by box » 17年前

前者の場合、コンパイラーによっては警告が出るかもしれません。

匿名

Re:3次元配列の初期化

#9

投稿記事 by 匿名 » 16年前

a[2][2][2] = {0};
って言うのできるんですね
ありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る