おまけのコーナー 4次元配列宣言、初期化も行ってみよう

マックス「てんC,どうだ、どうだ、うまくいったろう。


そうかあ ここまできたなら


4次元配列宣言、初期化もできるはずじゃないか。


今までの例からして


多分


4次元配列宣言も


int hairetu[2][3][4][2];のように


あらわせるはずだろう


ははっ 


ならば、この4次元配列宣言


int hairetu[2][3][4][2];


を初期化するための

数値を格納していく入れ物をつくっていくなら


手順は今まで通り


まず左端の[2]により

{ } { }を2つ作り


次に

[3]により

{ }のなかに{ }を3つ作る

{{ },{ },{ }},{{ },{ },{ }}


さらに

[4]により今の{ }のなかに{}を4つ作成する。

{{{},{},{},{}},{{},{},{},{}},{{},{},{},{}}},{{{},{},{},{}},{{},{},{},{}},{{},{},{},{}}}


そして{}のなかに数値が代入される場所〇を2個表示すると


{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}},{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}}となり


これを{}でまとめれば

4次元配列宣言を初期化するためのいれものの原型である

{{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}},{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}}}

が完成する。


な、なんか・・・長いかな・・・


4次元配列宣言

int hairetu[2][3][4][2];

に数値を格納して

初期化するには

int hairetu[2][3][4][2]=

{{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}},{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}}};

〇の部分に数値を代入すればいいわけだ。


この様式で正しいかどうかは

まず

この〇に適当に数値を代入し


int hairetu[2][3][4][2];

により生成される


配列変数


hairetu[1][1][2][1]に代入された値をprintf表示

するプログラムをつくる。


#include <stdio.h>


int main(void)

{

int hairetu[2][3][4][2]=

{{{{1,2},{3,4},{5,6},{7,8}},{{9,10},{11,12},{13,14},{15,16}},{{17,18},{19,20},{21,22},{23,24}}},{{{25,26},{27,28},{29,30},{31,32}},{{33,34},{35,36},{37,38},{39,40}},{{41,42},{43,44},{45,46},{47,48}}}};

printf("%d\n",hairetu [1][1][2][1]);

return 0;

}


そしてこのプログラムのコンパイル結果で


hairetu[1][1][2][1]の場所に格納された数値38がprintf表示されれば成功となるわけだ。

(なぜ数値38が


hairetu[1][1][2][1]の場所に格納されているのが


わかるのかは後述するんだぞ)


ふふ いいアイデアだろっ。」


てんC 「いい思考の流れですね。


これはとても楽しみです。どのような結果がでてくるのでしょうか?」


マックス 「なあっ 楽しみだろ 


うまくこの4次元配列宣言、初期化が機能するか・・


( ̄∇ ̄;)ハッハッハ それではコンパイル」


てんC「コ・ン・パ・イ・ル結果は・・・










お見事

38


です。


4次元配列宣言、初期化に成功しています。 マックスさん(^^)」




マックス「これも成功か! やったぜ。


 いやあ いい感じじゃないか。


それに、なんか、てんCがいると楽しいじゃないか(^^ ) 」


てんC「うふっ」


目が泳ぐてんC。


てんC「

ありがとう、マックスさん


おめでとう。 4次元配列も・・・使えるようになりました。」


。。。。。。。。。。。。。


ここで4次元配列宣言を初期化するための数値のいれもの

{{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}},{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}}};

においては


int hairetu[2][3][4][2];


[2]によってつくられた最初の{} ,{}を左から0番目.1番目


その{}の中の

[3]によってつくられた{},{},{}に左から0番目.1番目、2番目


さらにその{}の中の

[4]によってつくられた{},{},{},{}に0番目.1番目、2番目、3番目


さらにその{}の中の

[2]によってつくられた〇,〇に0番目.1番目

と順番が名づけられています。


0番目から順番がはじまっているのは


1,2,3次元配列のときとおなじです。


hairetu [1][1][2][1]に数値が格納される場所は


int hairetu[2][3][4][2];


[2]によってつくられた最初の{} ,{}の左から1番目


その{}の中の

[3]によってつくられた{},{},{}の左から1番目


さらにその{}の中の

[4]によってつくられた{},{},{},{}の左から2番目


さらにその{}の中の

[2]によってつくられた〇,〇の左から1番目


になります


ですので


今のプログラムででてきた


4次元配列hairetuの

配列変数の1つ


hairetu [1][1][2][1]に格納される数値の場所は◎の位置にあたり


{{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}},{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,◎},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}}};


38が格納されています。


もうひとつ例を示すと


hairetu [0][2][2][1]ならば


int hairetu[2][3][4][2];


[2]によってつくられた最初の{} ,{}の左から0番目


その{}の中の

[3]によってつくられた{},{},{}の左から2番目


さらにその{}の中の

[4]によってつくられた{},{},{},{}の左から2番目


さらにその{}の中の

[2]によってつくられた〇,〇の左から1番目


になります


ですので


hairetu [0][2][2][1]に格納される数値の場所は◎の位置にあたり


{{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,◎},{〇,〇}}},{{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}},{{〇,〇},{〇,〇},{〇,〇},{〇,〇}}}}


この場合は22が格納されています。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます