第6講 配列
第2話 配列の宣言と使い方
そのやり方は、
int a[10000];
です。これで1万個の変数が用意できます。
どのような変数が用意できたかと申しますと、
a[0],a[1],a[2],・・・,a[9999]
の1万個です。
最後がa[10000]でないことに注意して下さい。
0から始まっていますので、9999が1万個目になるのです
これを忘れて、
a[10000]=5;
などするとエラーします。
配列のことを添え字付き変数ともいいます。
添え字とは[]内の数字です。
配列は、一瞬にして多くの変数を用意できるだけでなく、
添え字が、for文の制御変数で制御できるという大変大変大きなメリットを持っています。
例によって具体例を示しましょう。
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a[10],i; //配列aと制御変数iの宣言
for (i = 0; i < 10; i++)a[i] = i + 1; //データ入力
for (i = 0; i < 10; i++)printf("%d ", a[i]); //データ出力
printf("\n"); //改行
return(0);
}
実行画面
1 2 3 4 5 6 7 8 9 10
このコードを
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int main() {
int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,i; //配列aと制御変数iの宣言
for (i = 0; i < 10; i++)ai = i + 1; //データ入力
for (i = 0; i < 10; i++)printf("%d ", ai); //データ出力
printf("\n"); //改行
return(0);
}
等とするとエラーします。
同じ添え字でもa0とa[0]では天と地ほど違うのです。
配列の添え字は、制御変数で制御できる!
これが大きなメリットなのです。
さて、なるべく仕事は部下にやらせて、
main()は指令役に徹するが原則ですから、
この講のこれ以降のコードは
#include<stdio.h> //prinf()を使えるようにするためにインクルード
void f();
int main() {
f();
return(0);
}
void f(){
int a[10],i; //配列aと制御変数iの宣言
for (i = 0; i < 10; i++)a[i] = i + 1; //データ入力
for (i = 0; i < 10; i++)printf("%d ", a[i]); //データ出力
printf("\n");
}
という形にします。
ポインタを学習しないと、
変数そのものや配列そのものを実質渡すことが出来ませんので、
現時点では、上のように書き換えることは余り意味がありませんが、
なんでも社長自ら仕事をやってしまうという悪癖を付けないための
次善の策です。
第7講でポインタを学んだ後、
配列や変数を実質渡すということを学んで、
それを実行すれば書き換えにははっきりと意義が生まれます、
ということを断っておきましょう。
実質が繰り返されている理由は、
ポインタを使っても箱そのものを渡せるわけではないからです。
箱そのものを渡せないのに仕事を依頼した人に自分専用の箱を使ってもらうという−−−
魔法にような方法をC言語は持っているのです。
では問題です。
関数f()に2次元のデータ作成と表示をやらせて、
41 67 34 0 69 24 78 58 62 64
を実現して下さい。
もちろん配列を利用することが条件です。
発生させるデータは100未満のランダムな整数です。
#include<stdlib.h> //rand()を使用できるようにインクルード
が必要ですね。