同じ変数名で複数の値を格納できます。それが配列です。配列を作成するには変数名と次元数、配列のサイズを指定します。配列の要素を取り出すときには配列の番号(添字といいます)を指定して取り出します。
次元数1の配列です。数学が好きな人はベクトルのようなものと考えればいいでしょう。サイズ3の配列を作成し、値を代入する例を示します。
#include <stdio.h> int main(){ int a[3]; /* サイズ3の配列準備 */ /* 配列変数の中身セット */ a[0] = 2; a[1] = 7; a[2] = 8; /* 配列の中身の表示 */ printf("%d, %d, %d\n",a[0],a[1],a[2]); return 0; }
注意しなければならないのは配列の添字は0からスタートすることです。サイズ3の場合にとれる添字は0, 1, 2であり、5の場合は0, 1, 2, 3, 4となります。配列のサイズは固定でなければならず、可変長配列はC言語では使用できません。
配列の添字は変数で指定できます。
#include <stdio.h> int main(){ int a[3]; /* サイズ3の配列準備 */ int b; /* これはループ変数 */ for(b = 0; b < 3; b++){ /* 配列の中身をセット。ループ変数*3 */ a[b] = b * 2; /* 配列の中身を表示 */ printf("%d ",a[b]); } printf("\n"); return 0; }
次元が2の配列です。行列のようなものと考えればいいでしょう。次元が増えただけで、内容は一次元配列と変わりません。サイズ3x2の配列を定義する例を示します。
#include <stdio.h> int main(){ int a[3][2]; int b; int c; for(b = 0; b < 3; b++){ for(c = 0; c < 2; c++){ a[b][c] = b * c; printf("%d ",a[b][c]); } } printf("\n"); return 0; }
次元数を3、4と増やせば多次元の配列ができあがります。
/* 例 */ int a[3][2][3]; int b[1][2][4][3];
配列も普通の変数と同様に宣言時に初期化できます。次のようにして行います。
#include <stdio.h> int main(){ int a[3] = {2, 7, 8}; printf("%d, %d, %d\n",a[0],a[1],a[2]); return 0; }
2次元の場合はこんな感じです。
#include <stdio.h> int main(){ int a[2][3] = {{2, 7, 8},{4, 5, 10}}; /* 処理省略 */ return 0; }
また、配列のサイズを指定せずに初期化を行えば、初期化した要素数に配列のサイズが合わせられます。
#include <stdio.h> int main(){ int z[] = {3, 2, 1}; /* 要素数3の配列になる */ int a[][] = {{2, 7},{4, 5}}; /* 2x2の配列になる */ /* 処理省略 */ return 0; }
このように作成された配列も最初に設定された固定サイズの配列であることに注意してください。