おまけのコーナー 5次元配列宣言、初期化もできるか試してみよっかな 

マックス「てんC,も、もしかして


4次元配列宣言、初期化もできるのなら・・・


こ、こ、この調子で5次元配列宣言、初期化もできるんじゃないのか?


はらはらドキドキ💖」


てんC 「???😊  わかりません。


でも、5次元配列 つくれたらいいですね。


また一つ C言語の得意技が増えそうですよ。


みてみたいです。」


マックス 「そうなのか


よ、よ~し てんC 俺が5次元配列をつくってみちゃおっかな。


(い、いやあ・・・


これは


配列変数に格納される数値の場所をしめす〇の数はかなりのものになるかも・・・)


まず、今までの例のように


5次元配列宣言


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


のようにあらわしてみる。


ふふふはははっ よおし ここからだ


ならば、


5次元配列を初期化するための数値を格納していく入れ物をつくっていく手順は今まで通り


まず

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

[2]により

{ } { }を2つ作り


次に

[3]により

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

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


さらに

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

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


さらに[2]により{}のなかに

{}を2つ作る。


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


最後に{}のなかに

[2]により数値を格納する〇を2つ記入すると

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


となり、これ全体を{}でくくると


5次元配列宣言

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

を初期化するための原型となる入物

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

が完成する。


おおっ我ながら

順調。


5次元配列int hairetu[2][3][4][2][2]を初期化する方法は


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

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

となるわけだ。


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

まず

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


この5次元配列宣言によって作成される


配列変数の1つである

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

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


#include <stdio.h>


int main(void)

{

int hairetu[2][3][4][2][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}}}},{{{{49,50},{51,52}},{{53,54},{55,56}},{{57,58},{59,60}},{{61,62},{63,64}}},{{{65,66},{67,68}},{{69,70},{71,72}},{{73,74},{75,76}},{{77,78},{79,80}}},{{{81,82},{83,84}},{{85,86},{87,88}},{{89,90},{91,92}},{{93,94},{95,96}}}}};

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

return 0;

}


そして,このプログラムがコンパイルでき


コンパイル結果が


hairetu[1][1][2][1][0]の場所に格納された数値75とprintf表示されれば

(なぜ、

hairetu[1][1][2][1][0]の場所に格納された数値が75となっているのが

わかるのかは

後で説明しちゃうぞ😝)


5次元配列宣言、初期化成功となるわけだ。


さあ、とりあえずここまできた。


??・・これは・・・さすがにコンパイルできるかな・・・」


てんC 「長い配列宣言になりました。マックスさん、


さて、さて、どうなる?どうなる?」


マックス 「この5次元配列宣言、初期化が機能するか・・


それではコンパイルっ」

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

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










またまたお見事

75


です。


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



マックス「おおお・・・これも成功か・・・ 


 いやあ やってみるものだなあ。」


てんC「ほんとうですね。』


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


ここで5次元配列宣言

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

を初期化するいれもの

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

においては


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

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


その{}の中の

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


さらにその{}の中の

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


さらにその{}の中の

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

と順番が対応しています。


さらにその{}の中の

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

と順番が対応しています。



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


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


この場合

5次元配列の中の


配列変数の1つ

hairetu [1][1][2][1][0]に数値を格納する◎の場所は


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

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


その{}の中の

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


さらにその{}の中の

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


さらにその{}の中の

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


さらにその{}の中の

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

○の位置になっています。


その○の位置を図で◎で示すと


◎の位置は


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

にあたり


75が格納されていますね


もうひとつ例を示すと


配列変数

hairetu [0][2][2][1][0]


に数値を格納する◎の場所は


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

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


その{}の中の

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


さらにその{}の中の

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


さらにその{}の中の

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


さらにその{}の中の

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

○の位置になっています。


図で示すと


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


の位置になります。


実際に

printf("%d\n",hairetu [0][2][2][1][0]);を実行して


配列変数hairetu [0][2][2][1][0]に格納されている数値を確かめると


コンパイル結果は

43

となり

確かに

{{{{{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}}}},{{{{49,50},{51,52}},{{53,54},{55,56}},{{57,58},{59,60}},{{61,62},{63,64}}},{{{65,66},{67,68}},{{69,70},{71,72}},{{73,74},{75,76}},{{77,78},{79,80}}},{{{81,82},{83,84}},{{85,86},{87,88}},{{89,90},{91,92}},{{93,94},{95,96}}}}}


と見比べてみると


◎の位置に

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


43が格納されています。



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

作者を応援しよう!

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

応援したユーザー

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