配列
同じ型の、複数の変数を一つにまとめたもの(データ列)。
↓要素数(配列の大きさ)
int a[4];
↑ ↑
型 配列名
初期化付宣言の方法
初期化の時だけ、まとめて数値を入れることができる。
int a[4] = {1, 2, 3, 4};
または
int a[] = {1, 2, 3, 4}; // データの数を自動的に読んで要素数を決定してくれる
使い方
基本的に変数と同じ。違う点は毎回 [x] で要素を指定すること。
【配列にアクセスする場合】
配列名[要素番号] ※一次元配列の場合※array[3] で宣言した場合
array[0] // 1番目の要素
array[1] // 2番目の要素
array[2] // 3番目の要素
※要素番号は 0 ~ 要素数-1 まで。
配列外にアクセスすると未定義動作となり、予期しない動作やクラッシュの原因になるため注意。
初期化(代入)の書き方のバリエーション
int array[3] = {10, 20, 30}; // 初期化時のみ可能
for (int ii = 0; ii < 3; ii++) {
array[ii] = 10 * (ii + 1);
}
または(カウンタを逆から回す場合)
for (int ii = 2; ii >= 0; ii--) {
array[ii] = 10 * (ii + 1);
}
※より実用的には
const int TBL_NUM = 3;
int array[3];
for (int ii = TBL_NUM - 1; ii >= 0; ii--) {
array[ii] = 10 * (ii + 1);
printf("%d\n", array[ii]);
}
配列と文字列(文字列を文字配列として扱う)
char str[] = "abc";
str[0] // 'a'
str[1] // 'b'
str[2] // 'c'
str[3] // '\0' ヌル文字(文字列の終端を表す文字)が自動的に入る
初期化付宣言
char str[4] = {‘a’, ‘b’, ‘c’, ‘\0’};
※「糖衣構文(Syntax Sugar)」
int array[10];のarrayは、多くの場面で先頭要素へのポインタのように扱われる。array[i]は*(array + i)の糖衣構文。- つまり、配列は連続したメモリ領域を持ち、要素アクセスはポインタ演算で説明できる。
- 配列名は関数に渡すと、先頭要素へのポインタとして扱われる(配列そのものが丸ごとコピーされるわけではない)。
この点については後述。

コメント