2014-05-05 34 views
0

在代碼: ...結構中的int字段沒有初始化什麼值?

#define MAXELEMNTS 100 

struct book 
{ 
    int number; 
    char name[31]; 
    char author[31]; 
    int year; 
    char publisher[31]; 
}; 

struct book bkStruct[MAXELEMENTS]; 

...

默認情況下初始化爲0的整數字段(數量和年),當其他字符字段都被初始化,但不是這兩個?或者他們有沒有知道 - 有什麼價值?根據我的經驗,他們確實有價值= 0,但我不確定這是一般規則,所以我必須確定!

最好的問候, PAPO

+2

這取決於您沒有提供足夠的答案信息。 – this

+4

這取決於'bkStruct'是否具有自動或靜態存儲持續時間。 –

+0

查看使用'new'時對象的初始化。它們也適用於堆棧中對象的初始化。 http://stackoverflow.com/a/620402/434551 –

回答

1

在C有沒有這樣的事情「部分初始化」。 如果通過爲單個成員指定一個值來初始化一個結構體,則會自動初始化所​​有其他成員(到合適種類的0)。

struct book 
{ 
    int number; 
    char name[31]; 
    char author[31]; 
    int year; 
    char publisher[31]; 
}; 

struct book book1; // no initialization 
struct book book2 = { .author = "pmg" }; // initialization of ALL of book2 

struct book bkStruct1[MAXELEMENTS]; // uninitialized array 
struct book bkStruct2[MAXELEMENTS] = {0}; // initialized array 
              // (every member of every element) 

注:一些實現可能會抱怨在完全合法的數組初始化缺少大括號。這是這些實現的問題。

+0

我同意抱怨'{0}'是個問題。不過,這不是一個錯誤,或者至少不符合標準 - 只要它是一個警告而不是致命的錯誤。 –

+0

如果'struct book book1;'發生在一個函數之外,是不是初始化所有位爲零? – chux

+1

@chux:它初始化爲* zero *(整數遞歸定義爲「0」,浮點定義爲「0.0」,指針定義爲「NULL」),它可以或不可以表示爲所有位零它很可能是)。 –

-1

是在安全起見,你應該intialize您varibales 0自己取決於編譯器它可能會選擇垃圾值以及

+4

這並沒有真正回答這個問題。 –

3

如果使用初始值設定項定義對象,則會初始化爲指定的值。如果只爲某些成員指定值,則其他值將初始化爲零(表示整數(包括字符)的0,浮點值的0.0,指針的NULL)。

如果沒有初始值定義一個對象,所有成員都隱含地初始化爲零如果對象具有靜態存儲持續時間,即,如果它的任何功能外定義或者如果它與static關鍵字定義的。

在沒有static關鍵字的函數中定義的對象具有自動存儲持續時間。這些對象,如果沒有明確初始化,就從垃圾值開始。 (如果你碰巧看到這樣的物體看似初始化爲零,記得零可以是一樣多的垃圾值別的)

你問:

是整數字段(數量和年)初始化爲0默認 當其他字符字段被初始化,但不是這兩個?

但您的問題中的代碼不會初始化char[]字段。請參閱pmg's answer,其中顯示了一些很好的示例,但目前沒有提及static與自動區分。