配列の登場です 配列は とっても便利なお方💖です

配列とは何のことでしょうか?配列の仕組みを学んでみましょう!

ソーラー「配列か  欧米化


実はC言語を学び始めたときからずっと気になってたんだ・・・」


マックス 「配列か


欧米化 やりがいのありそうな内容じゃないか。」 


ソーラー 「ええ。 早速とりかかってみようかな


なになに・・・


配列とは・・・


大量の数値データや文字データを格納することができ


大量の数値データや文字データをあつかうプログラムを記述するときに


大変便利な変数であるっ・・・と」


マックス 「いやあ 


大量の数値データや文字データをあつかうプログラムを記述するときに


大変便利な変数であるっ・・・・・・か・・・・


大変便利・・・なのか・・・


配列は難しいようなイメージがあったが


実は超便利で簡単な仕組みなんじゃないか?


今まで数値データを格納するのに


int a;



float b;


のように


変数宣言を行い


数値データを格納するための


変数a

変数b


を用意してきた。


そうして


変数a

変数b

に数値データを格納してから


その数値データをプログラム内でつかっていたわけだ


たとえば


整数値データは


整数値データを格納する入れ物である


int型の変数に格納され


次のプログラムのようにつかわれるわけだ。



#include <iostream>


using namespace std;


int main()


{

int a=1;

int b=2;

int c=3;


cout<<a<<"をとりこみました\n ";

cout<<b<<"をとりこみました\n ";

cout<<c<<"をとりこみました\n ";

return 0;


}


ビルド実行結果


1をとりこみました

2をとりこみました

3をとりこみました



マックス「まあ


とりあえず使いたい数値データを変数(この場合a,b,c)に格納してから


いろいろつかうというわけだ。」


ソーラー 「👆のようなプログラムは


配列をもちいてもっと簡単に記述できるみたいですよ。」


マックス「もっと簡単にぃ? もう、十分簡単だとおもうぞ?


欧米化するのか?」


ソーラー 「それでは配列の取り扱い方をみていきましょうか?


まず整数の数値データ1,2,3を配列にとりこんでみましょう。


変数宣言を行って変数を作製したように


配列も配列宣言を行わないと作製されません。


配列にも普通の変数と同様に格納する数値データが


整数か実数かによって


int型,float型等があります。


配列宣言は


数値データを格納する型 数値データを収める配列の名前 [要素数(格納する数値データの数)];(セミコロン)


と記述することによって行います。


整数値データ1,2,3をhairetubox と名づけた配列に格納するならば


hairetuboxの配列宣言を次のように


整数の型intを用いて


int hairetubox[3];


(配列の名前は hairetuboxにしました。)


と記述します。


マックス 「なに この[]でかこまれた[3]って?


[要素数(格納する数値の数)]?」


ソーラー 


「ねえ、マックス この


int hairetubox[3];


と記述された状態は


変数aに数値データ1を格納するときでいえば


int a;とかかれた状態に相当します。


つまり


int hairetubox[3];


とは


配列hairetubox[3] を宣言して


このhairetubox[3]に数値を格納していこうという状態なのです。


変数aに数値データ1を格納するときでいえば


int a;


とかかれた、このあと


a=1;


と初期化しますよね。


私たちも


配列hairetubox[3]に数値データ1,2,3を代入して初期化していくのですが


まずは このhairetubox[3]の[]の中の3の意味だね。


配列hairetubox[3] と[ ]のなかに3と記述されたら


配列hairetubox[3]の中には数値データを格納するいれものが


次のように3つできています。


hairetubox[0]

hairetubox[1]

hairetubox[2]


順序よく0,1,2の順に


hairetubox[0]

hairetubox[1]

hairetubox[2]



数値データを格納する入れ物がなかよく


ならんでいるわけだね。


この


hairetubox[0]

hairetubox[1]

hairetubox[2]


を配列変数といいます。


そして


int型の配列宣言int hairetubox[3];


がおこなわれることにより用意される


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


はint型となっており


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


には


整数値データを格納することができます。


ここで 上記の


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]



hairetubox[ ]の[ ]の中が0からはじまって


2で終わっているところがポイントです。


整数値データを格納するint型の配列変数は配列hairetubox[3] のなかで


hairetubox[1]

hairetubox[2]

hairetubox[3]


と生成されているのではなく


hairetubox[0]

hairetubox[1]

hairetubox[2]


と生成されているのです 


そして                     


配列宣言int hairetubox[3];によって生成される


この3つの配列変数に


int hairetubox[3];


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;



数値データ1,2,3を代入していきます。


変数aに数値データ1を代入していくのと全く同じ仕組みです。


つまり


変数宣言


int a;


が行われたなら


a=1;



a=5;


のように数値データを格納することができましたね


同様に


int型の配列宣言


int hairetubox[3];


が行われたなら


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


のように数値データを格納できるというわけです。


このときの


hairetubox[3];


の [ ]の中の数値3は要素数といいます。


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


の [ ]の中の数値0,1,2は要素番号


または


インデックス(目次)とよびます。


つまりhairetuboxの配列宣言


int hairetubox[3];


によって


配列hairetubox[3]の中に3つの数値データを格納する入れ物である配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


ができているというわけです


そして


0番目はhairetubox[0]

1番目はhairetubox[1]

2番目はhairetubox[2]


となっているわけです。


格納したい配列変数に自由に整数値データを代入していけるので


整数値データ1,2,3を配列hairetubox[3] に格納する場合


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


以外にも


hairetubox[0]=2;

hairetubox[1]=1;

hairetubox[2]=3;


のように


hairetubox[0]に2

hairetubox[1]に1

hairetubox[2]に3


を代入することも


hairetubox[0]=3;

hairetubox[1]=2;

hairetubox[2]=1;


のように


hairetubox[0]に3

hairetubox[1]に2

hairetubox[2]に1


を代入することもできます。


このように


hairetubox[0]

hairetubox[1]

hairetubox[2]


の好きな配列変数に整数値データを代入できるわけです。


そして


整数値データ1,2,3を配列hairetubox[3] に格納する場合


int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


とhairetubox[3] の中の3つの配列変数に


ひとつずつ整数値データを代入していっても


よいのですが もっと簡単な方法があります。


それは


数値データを格納する型 数値データを収める配列の名前 [要素数(格納する数値データの数)]


=(イコール){格納したい数値データA、格納したい数値データB、格納したい数値データC・・・・・・・};



と記述する方法です。」


マックス 「ふっ さっぱりぃ わからんなぁ」


ソーラー「やっぱりぃィ😊


この


int hairetubox[3];


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


なら


次のように簡略化して


int hairetubox[3]={1,2,3};


と記述することができます


この場合


表面上みえませんが


自動的に


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


が3つ用意されて


0番目の配列変数であるhairetubox[0]に1が

1番目の配列変数であるhairetubox[1]に2が

2番目の配列変数であるhairetubox[2]に3が


代入されていきます。


自分で


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


と1つずつ手動で書き込む必要はありません。


とっても便利ですね。


つまり配列をこのような簡単な方法で初期化して


数値データを代入していくことができるわけです。


しかも このように初期化していく場合


さらに楽チンに


int hairetubox[3]={1,2,3};の[ ]の中の要素数の3を省略して


int hairetubox[ ]={1,2,3};と記述することができます。


要素数を[3]と指定しなくても さきほどと同じように

    


     🐤 代入する整数値データの数に合わせて 🐤



自動的に整数値データ1,2,3に対応した

整数値データのいれものである


int型の配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


が3つ用意されて


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


のように整数値データが代入されていきます。



ますます


さらに便利になりました。奥さん


int hairetubox[3];の要素数3を省略できるといっても


int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;



int hairetubox[ ] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


のように


記述してしまうとunknown type size


配列の要素数が指定されていませんよ。と言う意味の


ビルドエラーが表示されます。


int hairetubox[ ]={1,2,3};と記述するときのみ


[ ]の中の要素数を省略できるのです。


ようやくですが


int型の配列宣言


int hairetubox[3] ;


を実行して


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


を生成し


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]

格納した数値データ1,2,3を


コマンドプロンプト画面にcout出力表示してみましょう。


そのプログラムはつぎのようになります。」


#include <iostream>


using namespace std;


int main()


{


int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


cout<<hairetubox[0]<<"\n";

cout<<hairetubox[1]<<"\n";

cout<<hairetubox[2]<<"\n";


return 0;

}


ビルド実行結果

1

2

3


ソーラー「

このプログラムの配列宣言、初期化


int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


を簡略化して


int hairetubox[ ]={1,2,3};



記述すると


ソースコードは


#include <iostream>


using namespace std;


int main()


{


int hairetubox[] = { 1,2,3 };


cout << hairetubox[0] << "\n";

cout << hairetubox[1] << "\n";

cout << hairetubox[2] << "\n";


return 0;

}


ビルド実行結果


1

2

3


となります。


いかがでしょうか?」


マックス「


hairetubox[0]の中に格納されている数値データを表示するのも


変数aの中に格納されている数値データを表示するのも


なんかにているな~~~


hairetubox[0]の中に格納されている数値データを表示する方法は


cout << hairetubox[0] << "\n";


だろう?


変数aの中に格納されている数値データ1を表示する方法は




#include <iostream>


using namespace std;


int main()


{

int a=1;


cout << a<< "\n";


return 0;


}


ビルド実行結果

1


だからな


~~~(^^)~~~


                      つづく


🐤...🐤...🐤...





solarplexuss




「int hairetubox[3];


と配列宣言したとき


配列変数が


hairetubox[1]

hairetubox[2]

hairetubox[3]


と生成されず


hairetubox[0]

hairetubox[1]

hairetubox[2]


と0番目から生成されるのは


hairetubox[1]

hairetubox[2]

hairetubox[3]


と配列変数が生成されるようにすると


配列宣言


int hairetubox[3];


のhairetubox[3]



生成される


配列変数の


hairetubox[3]がかぶってくるからかな?かな?


まぎらわしくなる?からかな?かな?



なんか そう、思ったのよ~ん。


🐤...🐤...🐤...






👇






👇






👇





補足のコーナー





みなさん こんにちは(´▽`*)/




元気ですか~~~😊


solarplexussです




もう一度、先程のプログラムをご覧ください



#include <iostream>


using namespace std;


int main()


{


int hairetubox[3];


hairetubox[0] = 1;

hairetubox[1] = 2;

hairetubox[2] = 3;


cout << hairetubox[0] << "\n";

cout << hairetubox[1] << "\n";

cout << hairetubox[2] << "\n";


return 0;

}


ビルド実行結果


1

2

3


solarplexuss「


先程の説明では


int hairetubox[3] ;


が行われると


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


が配列hairetubox内に作製されて


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]



数値データ

1

2

3



hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


と代入することができると説明されていましたが


正確な説明は


int hairetubox[3] ;


が実行されると


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


を通して


メモリに数値データ


1

2

3


を格納できるとなります。


つまり


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


はメモリにデータを格納するための窓の役割を果たしています



int a;


が実行されると


あるメモリにaという名前がつけられ


変数aによってそのメモリは管理されます


int hairetubox[3] ;


が実行されると


あるメモリは

配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


によって管理されることになりますが


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


窓の役割を果たしており


必ずしも同じメモリだけにアクセスするわけではありません


他のメモリにアクセスする場合もあります


マックス 「何のことなんだ?????」


詳しくはこれから先のエピソードで学んでいきましょう😊


今日は こ こ ま で💖








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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る