C言語⑫[配列]

配列

同じ型の、複数の変数を一つにまとめたもの(データ列)。

    ↓要素数(配列の大きさ)
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) の糖衣構文。
  • つまり、配列は連続したメモリ領域を持ち、要素アクセスはポインタ演算で説明できる。
  • 配列名は関数に渡すと、先頭要素へのポインタとして扱われる(配列そのものが丸ごとコピーされるわけではない)。

この点については後述。

コメント

タイトルとURLをコピーしました