2013-05-07 59 views
3

這是什麼初始化的含義:數組初始化Ç

char arr[10] = { 0, }; 

我熟悉char arr[10] = {0};其將所有的元素爲零,並且與它char arr[10] = {1,2};設定第一兩個元件1和2(ASCII ),其餘爲0. 我對上述格式不熟悉。 一個快速測試表明它可能就像char arr[10] = {0};,但是我還沒有意識到其他含義?

+0

[編程語言語法中尾隨逗號的歷史記錄]的可能重複(http://stackoverflow.com/questions/2311864/history-of-編程語言文法中的尾隨逗號) – 2013-05-07 08:35:24

+0

[int a \ [\] = {1,2,};允許使用奇怪的逗號。任何特定的原因?](http://stackoverflow.com/questions/7043372/int-a-1-2-weird-comma-allowed-any-particular-reason) – hammar 2013-05-07 08:37:23

+0

只是多餘的代碼。可以用arr替代[10] = {}; – Nikolai 2013-05-07 08:37:43

回答

6

是的,它與沒有尾隨逗號的版本相同。

有關尾隨逗號的更多討論,請參閱this question

1

char arr[10] = { 0, };char arr[10] = {0}在這種情況下是相同的。

char arr[10] = {5, }是不同的。 5將被存儲在一個[0]中,剩下的將被填入零。

我建議不要用這個全局變量,因爲它會增加數據段的大小。

6

How to initialize all members of an array to the same value?

所有成員初始化爲相同的值:

int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; 

元素缺失值將被初始化爲0:

int myArray[10] = { 1, 2 }; //initialize to 1,2,0,0,0... 

因此,這將初始化所有元素0:

int myArray[10] = { 0 }; //all elements 0 

在C++中,一個空的初始化列表也將每一個元素初始化爲0:

int myArray[10] = {}; //all elements 0 in C++ 

具有靜態存儲期的對象將初始化爲0,如果沒有指定初始值設定:

static int myArray[10]; //all elements 0 

如果你的編譯是GCC,你可以使用下面的語法:

int array[1024] = {[0 ... 1023] = 5}; 
int A[10] = {[0 ... 4] = 5, [5 ... 9] = 3}; 
2

作爲標準

A trailing comma may appear after the last expression in an array initializer and is ignored

0

int arr[3] ={0,};int arr[3] ={0};之間沒有區別。

號:C11 6.7.9:

initializer: 
     assignment-expression 
     { initializer-list } 
     { initializer-list , } 

這兩種形式的初始化列表中被認爲是初始化。帶有逗號結尾的表單被許多人所青睞,因爲它可以在代碼維護期間重新排列元素或將元素添加到列表中。

int arr[3] ={0,}; 

聲明瞭三個元素的陣列,並且這樣做的部分初始化的第一個元素初始化爲0,陣列的其餘部分被自動地用零初始化。

Ref。 C11 6.7.9:

如果在一個大括號內的列表更少初始化值多於 是用於初始化已知大小的陣列不是元素或聚集體的成員,或更少的字符在 字符串文字有 是數組中的元素,聚合的其餘部分應該是 隱含地被初始化爲具有靜態存儲持續時間的對象。

[我爲另一個question寫了這個答案,但它關閉了dup。雖然我喜歡這個答案,所以我要重新發布原始問題。]