配列変数


・int a,b,c,d,e,f,g,h,………!?

 オセロをつくりたいと思ったとします。 当然ながら盤面の状態を覚えておく必要があります。 オセロ盤は64マスなのでそのためには64個の変数が必要になります。 が、しかしこんなにたくさんの変数、上の見出しのように宣言したらものすごいことになってしまいますし、どれがどのマスやら分からなくなってしまいます。 これを解決するのが配列変数、マスはたくさんあっても盤は一つなわけですから64個の値を保管する一つ変数として宣言でき、個々の値の参照も簡単です。

・宣言

型 変数名[要素数];
 後ろに[要素数]がついただけで普通の変数の宣言と一緒ですね。 同じ変数名を持つ要素数個の変数が宣言されます。 例えばint a[5];とやるとa[0]、a[1]、a[2]、a[3]、a[4]の五個の変数が宣言されます。 0から数えて要素数個なのでa[5]はないことに気をつけてください。 この説明で分かったと思いますが配列変数の各値は変数名[添え字]で表します。 添え字とは[]内にいれる数字のことです。 (数列かなんかをイメージしてください。)

 二次元以上の配列もつくれます。

型 変数名[要素数][要素数];
次元数だけ[要素数]を書くだけです。 例えばint ban[8][8];とやれば8×8の配列変数になります。 (行列かなんかをイメージしてください。) ちなみに最初のオセロの例ですね。

・代入

 個別に代入するなら

int a[5];
a[0]=4;
a[1]=1;
a[2]=7;
a[3]=6;
a[4]=2;
宣言時にまとめて代入するなら
int a[5]={4,1,7,6,2};

 二次元以上の場合も同様です。
個別に代入するなら

int a[3][3];
a[0][0]=4;a[0][1]=1;a[0][2]=7;
a[1][0]=6;a[1][1]=2;a[1][2]=2;
a[2][0]=5;a[2][1]=1;a[2][2]=4;
宣言時にまとめて代入するなら
int a[3][3]=
{
	{4,1,7},
	{6,2,2},
	{5,1,4}
};

・メリット

 配列変数最大のメリットは添え字に変数がいれられることです。 例えば配列を使わず0番目の変数をa、1番目の変数をb、2番目の変数をcなどとしていた場合、i番目に1を代入したいとすると

if(i==0) a=1;
if(i==1) b=1;
if(i==2) c=1;
などとやらねばなりませんが、配列変数a[3]なら
a[i]=1;
たったこれだけです。 要素数が多い時ほどこのメリットが活きます。

 またforなどを利用して全ての要素の一括処理が簡単にできます。

for(i=0;i<3;i++)
	printf("%d",a[i]);