2017-03-02 8 views
1

?それはゴミですか?それともゼロですか?私のコードでは、のために0が得られましたが、私のTAはそれがゴミになると私に言ったのですか?私は章の配列を宣言した場合Cの構造体自動初期化値、配列の初期化

はまた、:

Chapter chapters[30]; 

それが0/NULL大切な要素と30の構造体で満たされるでしょうか?あるいは、ガーベージ要素で初期化されますか?

答えて

7

によって異なります。明示的に初期化しない限り、変数が静的(またはスレッド)記憶域期間を持つ場合、

  • は、メンバーが0または同等に初期化されます。場合

  • 、自動記憶域期間を有し、内容は不定のままになります(はい、 「不定」「ゴミ」よりも適切です)。自動記憶域期間を持つオブジェクトは、明示的に初期化されていない場合§6.7.9/ P10

引用C11、章では、その値は不定 あります。静的またはスレッド記憶期間を持つオブジェクトが、明示的に で初期化されていない場合は、

- ポインタ型の場合はNULLポインタに初期化されます。

- 算術型の場合は、(正または符号なし)ゼロに初期化されます。

- 集合体の場合、すべてのメンバーはこれらの規則に従って(再帰的に) で初期化され、パディングはゼロビットに初期化されます。

- 共用体の場合、最初の名前付きメンバはこれらの規則に従って(再帰的に)初期化され、パディングはゼロビットに初期化されます。