2015-07-13 97 views
-1

我有這樣的結構:C結構陣列的默認值

typedef struct { 
    GPIO_TypeDef* GPIO_Reg; 
    uint16_t GPIO_Pin; 
    uint16_t status; 
} PinType; 

然後,如果我聲明此數組:

PinType array[10]; 

數組中的PinType元件與某些缺省值初始化?

例如,如果我這樣寫:

printf("%d", array[1].status); 

我應該看到0作爲輸出?或者在聲明數組之前初始值取決於內存的內容?

回答

1

結構成員是不是初始化,除非變量是static或全局。

事實上,使用一個未初始化的構件處於C.

memset婷未定義的行爲用零陣列是慣用的。

4

這個答案取決於變量的範圍。

  • 如果array是全局的,那麼它將被自動初始化。
  • 如果arraystatic,則所有元素將被自動初始化爲0
  • 如果arrayautomatic存儲,則不會自動初始化。
+1

加一;第一個經常被遺忘 – Bathsheba

+0

所以如果我的數組是全局的,如果我嘗試做printf我應該總是收到一個「0」?如果這是真的,這是我可以依靠的一個功能?我的意思是,它在某種程度上依賴於編譯器或由C標準定義? – PaulRox