次のように 2 次元配列を宣言すると、次のようになります。
char myArray[20][30] = {"ABC", "Is Easy As One Two Three"};
この配列の他のすべての文字が に設定されていると仮定できます\000
か?
C では、オブジェクトが部分的に初期化されることはありません。初期化子を使用した場合、オブジェクト全体が初期化されることが保証されます (この場合、「オブジェクト」は、それぞれ 30 文字の 20 個の配列の配列全体です)。明示的に初期化されていないメンバーは、ゼロ (算術型の場合) または NULL (ポインター型の場合) に再帰的に初期化されます。
したがって、この場合の答えはイエスchar
です。イニシャライザによって明示的に値が指定されていないすべての s は、0 であることが保証されています。
これは、セクション 6.7.8、初期化の C99 標準で説明されています。関連する段落は次のとおりです。
21 集合体の要素またはメンバーよりもブレースで囲まれたリスト内の初期化子が少ない場合、または配列内の要素よりも既知のサイズの配列を初期化するために使用される文字列リテラル内の文字が少ない場合、集合体の残りの部分静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます。
と
10 自動保存期間を持つオブジェクトが明示的に初期化されていない場合、その値は不確定です。静的ストレージ期間を持つオブジェクトが明示的に初期化されていない場合:
— ポインター型の場合、null ポインターに初期化されます。
— 算術型の場合、(正または符号なし) ゼロに初期化されます。
— 集合体の場合、すべてのメンバーはこれらの規則に従って (再帰的に) 初期化されます。
— 共用体の場合、最初の名前付きメンバーは、これらの規則に従って (再帰的に) 初期化されます。