2015-10-05 65 views
4

這是如何工作的(將所有值設置爲0)?int數組[30] = {0};這是如何工作在C?

int array[28]= {0}; 

爲什麼這不起作用(沒有設置所有值爲4,但只有第一個值設置爲4,其他值爲0)?

int array[28]= {4}; 
+0

這裏是你的問題的答案:http://stackoverflow.com/questions/4066522/setting-an-array-to-one-value – 2015-10-05 11:33:37

回答

10

未初始化被設置爲0。在你的第一情況下,你可以通過提供其值作爲0和其餘initilizing它是由缺省初始化爲0。在第二個情況下,第一值是與intialized 4和元素其餘爲0。標準說:

如果在一個大括號內的列表更少初始化值多於 是用於初始化的陣列元件或聚集體的成員,或更少的字符在 字符串文字已知的尺寸比有 是數組中的元素,所述聚集體的其餘部分應 初始化隱含的相同甲肝對象e靜態存儲 持續時間。

10

在C中,在一個初始化未列出的任何元素被隱式地被初始化到它的零值。

int array[28]= {0};創建一個28個整數的數組,並將第一個元素初始化爲0.其餘元素在初始化程序中未提及獲取其零值,對於整數是0。

int array[28]= {4};工作方式類似。第一個元素初始化爲4,初始化程序中未提及的其餘元素的值爲零。

1
int array[5] = {0} 

所有的元素將被初始化爲0

int array[5] = {1,2,3} 

在這種情況下第一元件將被初始化爲1,第二至2,第三至3和其餘的元素爲0的。

+3

'int array [5] = {}',不允許在C.在C++中很好。 –

+1

C禁止空初始化括號,你的意思是'{0}'? –

+2

一個很好的例子,但它不是問題的答案爲什麼會發生這種情況。 – Psytho

2

很簡單,因爲標準要求它。

ISO/IEC:9899(C99標準)TC3狀態:

6.7.8初始化

[...]

21如果在較少的初始值設定一個大括號內的列表之外還有用於初始化已知 尺寸比有AR的陣列的元件或部件 的集合體,或更少的字符在字符串文字e元素,則聚合的其餘部分應爲 ,隱式地初始化爲與具有靜態存儲持續時間的對象相同。

什麼指的是同款點10: (重點煤礦)

10如果具有自動存儲時間的對象沒有初始化,它的價值是不確定的 。 如果具有靜態存儲持續時間的對象沒有被明確初始化,然後

- 如果它有指針類型,它被初始化爲空指針;

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

- 如果它是一個聚合,每個成員根據這些規則初始化(遞歸);

- 如果它是一個聯合,根據這些規則初始化(遞歸)第一個命名成員。

所以簡單地說,這是必須發生的,這就是爲什麼發生。