配列の登場です 配列は とっても便利なお方💖です
配列の仕組みを学んでみましょう!
ソーラー「配列か
欧米か・・・
」
マックス「・・・」
ソーラー「
ここまできたんだ・・・
実は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]
は
窓の役割を果たしており
必ずしも同じメモリだけにアクセスするわけではありません
他のメモリにアクセスする場合もあります
詳しくはこれから先のエピソードで学んでいきましょう😊
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます