このように配列を初期化するint a[5] = {0}
と、コンパイラは 5 つの要素をすべて 0 にします。これは非常に優れたコンパクトな初期化であり、便利な機能です。
しかし、なぜコンパイラがint a[5]={1}
同様に初期化しないのだろうか? 5つの要素すべてを1にしないのはなぜですか? 規格がそれを義務付けていないのはなぜですか? それは素晴らしい機能ではないでしょうか?欠けていませんか?
また、初期化子の要素数が配列のサイズよりも少ない場合、コンパイルは初期化子の最後の要素で残りの要素を初期化できます。つまり、int a[5]={1,2,3}
と同等int a[5]={1,2,3,3,3}
です。同様に、int a[10]={1,2,3,0}
は と同等int a[10]={1,2,3,0,0,0,0,0,0,0};
です。
標準で義務付けられている場合、それはすべて素晴らしい機能ではないでしょうか? または、この欠落している機能には正当な理由がありますか?
また、C99 には指定イニシャライザと呼ばれるものがあり、次のように使用されます。
次の例のように、指定された初期化子を通常の初期化子と組み合わせることができます。
int a[10] = {2, 4, [8]=9, 10}
この例では、a[0] は 2 に初期化され、a 1は 4 に初期化され、a[2] から a[7] は 0 に初期化され、a[9] は 10 に初期化されます。
非常に興味深い。しかし、この機能でさえ C++ にはありません。