
126
8
章 配列
myArray+i
は、添字
i
の要素へのポインタになり、式
*(myArray+i)
は
myArray[i]
に等価と
なる(「5.2.1.2ポインタ算術」参照)。
次のループ文は、添字の代わりにポインタを使い、配列
myArray
の各要素の値を倍にす
る。
for (long* p = myArray; p < myArray + A_SIZE; ++p)
{
*p *= 2;
}
8.3
配列を初期化
配列変数を明示的に初期化しないなら、通常の規則が適用され、配列が自動記憶域期間
を持つなら、その要素は未定義値を持つ。自動記憶域期間以外なら、全要素はデフォルト
の値0に初期化される(要素がポインタなら
NULL
に初期化される)。詳細は「11.7 初期化」
参照。
8.3.1
初期化リストを書く
定義時に配列を明示的に初期化するには、初期化リストを使わねばならない。これは
初期化子のカンマ区切りリスト、つまり個別配列要
素の初期値を波括弧で括ったものであ
る。例を示す。
int a[4] = { 1, 2, 4, 8 };
この定義により、次の初期値の配列要素が決まる。
a[0] = 1, a[1] = 2, a[2] = 4, a[3] = 8
配列初期化には次の規則がある。
●
可変長配列の定義では初期化ができない。
●
配列が静的記憶域期間を持つなら、配列初期化子は定数式でなければならない。配列
が自動記憶域期間を持つなら、初期化子に変数を使える。
●
初期化リストを使うなら、定義の配列長を省略でき ...