2012-07-03 34 views
0

在動態創建的結構數組中,結構的每個條目都會初始化爲什麼?在C數組中,什麼是結構初始化爲?

詳情:
如果我們創建花車像這樣一個動態數組:

float* arr = (float*) malloc (100 * sizeof (float)); 

則數組可以通過任何東西(see here)進行填充。但我有麻煩纏繞我的頭左右,當我們替代的結構爲花車,像這樣

typedef struct 
{ 
    float x = 123.456; 
} foo; 

foo* arr = (foo*) malloc (100 * sizeof (foo)); 

與完全初始化foo結構創建數組arr的所有條目還是我去走一走,手動發生了什麼更新x值?

+1

那編輯真的有必要嗎?它是爲了獲得重要的意圖。 – puk

回答

3
typedef struct 
{ 
    float x = 123.456; 
} foo; 

結構類型中不能有默認值。這不是有效的C代碼。

malloc分配的對象具有不確定的值。

+0

即使在C++ 11中也沒有? –

+0

這被標記爲C,但即使在C11中也是不可能的。 – ouah

+0

謝謝我沒有意識到這一點。 – puk

1

浮動和結構沒有區別。您需要手動初始化每個動態分配的內存區域。

1

事實上,float的情況可以「初始化」爲任何東西應該提供您需要的答案 - 它實際上並未初始化,但它可能包含任何內容,因爲沒有完成初始化。 struct也是如此 - 在分配上不進行初始化,所以返回的內存段的(相當可能的)垃圾內容就是你會得到的。如果你關心你新分配的內存的內容(你可能應該),你需要自己明確地初始化它。