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

配列の仕組みを学んでみましょう!


ソーラー「配列か  


欧米か・・・



マックス「・・・」


ソーラー「


ここまできたんだ・・・


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


マックス 「配列か やりがいのありそうな内容じゃないか。」 


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


なになに・・・


配列とは・・・


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


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


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


マックス 「いやあ 


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


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


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


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


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


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


int a;

float b;

のように

変数宣言を行い


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


変数a

変数b

用意してきた。


そうして

変数a

変数b

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


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


たとえば

整数の数値データ1,2,3は


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


int型の変数に格納され


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


#include <stdio.h>


int main(void)

{

int a=1;

int b=2;

int c=3;


printf("%dをとりこみました\n ",a);

printf("%dをとりこみました\n ",b);

printf("%dをとりこみました\n ",c);

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からはじまって


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


整数値データを格納する配列変数は配列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を代入していきます。


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


つまり


変数宣言

int a;

が行われたなら

a=1;

a=5;

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


同様に

配列宣言

int hairetubox[3];

が行われたなら


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


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


このときの


int 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};



簡単に記述することができます


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に対応した

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

配列変数

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};と記述するときのみ


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


ようやくですが


この配列hairetuboxをつかって配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


を生成し


配列変数


hairetubox[0]

hairetubox[1]

hairetubox[2]


に格納した数値1,2,3を


コマンドプロンプト画面にprintf出力表示するプログラムを実行してみましょう。


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



#include <stdio.h>


int main(void)

{

int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


printf("%d\n",hairetubox[0]);

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

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


return 0;

}


プログラムの実行結果


1

2

3


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


int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


を簡略化して


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


記述すると


ソースコードは


#include <stdio.h>


int main(void)

{

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


printf("%d\n",hairetubox[0]);

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

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


return 0;

}

となり


プログラムを実行すると


1

2

3


がコマンドプロンプト画面に表示されます


いかがでしょうか?」


マックス「


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


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


なんかにているな~~~


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


printf("%d\n",hairetubox[0]);


だろう?


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


#include <stdio.h>

int main(void)

{

int a=1;


printf("%d\n",a);

return 0;

}


だからな


~~~(^^)~~~


                      つづく

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



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です


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


#include <stdio.h>


int main(void)

{

int hairetubox[3] ;


hairetubox[0]=1;

hairetubox[1]=2;

hairetubox[2]=3;


printf("%d\n",hairetubox[0]);

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

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


return 0;

}


プログラムの実行結果


1

2

3


solarplexuss「


先程の説明では


int hairetubox[3] ;


が行われると

配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


が作製されて


配列変数

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で共有
  • はてなブックマークでブックマーク

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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