array[100] ={0} はどのように配列全体を 0 に設定しますか?

それは魔法ではありません。

C でのこのコードの動作は、C 仕様 (C 仕様のオンライン ドラフト) のセクション 6.7.8.21 で説明されています。指定された値を持たない要素の場合、コンパイラはポインターを NULL に初期化し、算術型をゼロに初期化します (これを再帰的に集計に適用します)。

C++ でのこのコードの動作は、C++ 仕様 (C++ 仕様のオンライン ドラフト) のセクション 8.5.1.7 で説明されています。コンパイラは、指定された値を持たない要素を集約初期化します。

また、C++ (ただし C ではない) では、空の初期化子リストを使用できることに注意してください。これにより、コンパイラは配列のすべての要素を集約初期化します:

char array[100] = {};

これを行うときにコンパイラが生成する可能性のあるコードの種類については、次の質問を見てください:配列 0-initialization からの奇妙なアセンブリ


実装はコンパイラ開発者次第です。

あなたの質問が「そのような宣言で何が起こるか」である場合 - コンパイラは最初の配列要素をあなたが提供した値 (0) に設定し、他のすべては省略された配列要素のデフォルト値であるためゼロに設定されます.


コンパイラが GCC の場合、次の構文も使用できます:

int array[256] = {[0 ... 255] = 0};

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html#Designated-Inits を見てください。これはコンパイラ固有であることに注意してください。