2017-03-02 206 views
1

如果我有兩個結構C結構自動初始化值,數組初始化

typedef struct { 
    int number_of_lines; 
    char lines[MAX_CHAPTER_LINES][MAX_STR_SIZE + 1]; 
} Chapter; 

typedef struct { 
    char name[MAX_STR_SIZE + 1]; 
    int number_of_chapters; 
    Chapter chapters[MAX_CHAPTERS]; 
} Book; 

我開了一章變量:

Chapter x1; 

什麼將它的兩個成員的值被初始化爲?它是垃圾嗎?還是零?在我的代碼中,我得到0int,但我的TA告訴我這將是垃圾?

此外,如果我聲明章節的數組:

Chapter chapters[30]; 

會是填充有30層結構與0/NULL值元素?或用垃圾值元素初始化?

回答

7

這取決於。除非明確初始化,

  • 如果變量具有靜態(或線程)的存儲時間,成員將被初始化爲0或同等學歷。

  • 在情況下,它具有自動存儲持續時間,內容將被留不確定的(是的,「不確定」「垃圾」更合適)。

引用C11,章§6.7.9/ P10

如果具有自動存儲持續時間的對象沒有被明確初始化,它的值是 不確定的。如果具有靜態或線程存儲持續時間的對象未明確初始化爲 ,則:

- 如果它具有指針類型,則將其初始化爲空指針;

- 如果它有算術類型,它被初始化爲(正或無符號)零;

- 如果它是一個聚合,每個成員根據這些規則初始化(遞歸), 並且任何填充被初始化爲零位;

- 如果它是聯合,第一個命名構件(遞歸地)根據這些規則初始化,並且任何填充被初始化爲零比特;