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

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

ソーラー「配列か  ここまできたんだ・・・


実は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を代入していきます。


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


つまり


変数宣言

int a;

が行われたなら

a=1;

a=5;

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


同様に

配列宣言

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

数値のいれものである

配列変数

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]


を生成し


配列変数に格納した数値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]


は配列内に作製されていません。


ど~いうこと?


と思われるかもしれません(笑)


正確な説明は


int hairetubox[3] ;


が実行されると


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


は配列内に作製されていませんが


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


を通して


メモリに数値データ


1

2

3


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


つまり


配列変数

hairetubox[0]

hairetubox[1]

hairetubox[2]


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


ソーラー「そ、そうだったのか・・・」


マックス「なにぃぃぃぃぃぃぃぃぃぃぃ」











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

作者を応援しよう!

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

応援したユーザー

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