這是什麼初始化的含義:數組初始化Ç
char arr[10] = { 0, };
我熟悉char arr[10] = {0};
其將所有的元素爲零,並且與它char arr[10] = {1,2};
設定第一兩個元件1和2(ASCII ),其餘爲0. 我對上述格式不熟悉。 一個快速測試表明它可能就像char arr[10] = {0};
,但是我還沒有意識到其他含義?
這是什麼初始化的含義:數組初始化Ç
char arr[10] = { 0, };
我熟悉char arr[10] = {0};
其將所有的元素爲零,並且與它char arr[10] = {1,2};
設定第一兩個元件1和2(ASCII ),其餘爲0. 我對上述格式不熟悉。 一個快速測試表明它可能就像char arr[10] = {0};
,但是我還沒有意識到其他含義?
是的,它與沒有尾隨逗號的版本相同。
有關尾隨逗號的更多討論,請參閱this question。
char arr[10] = { 0, };
和char arr[10] = {0}
在這種情況下是相同的。
但char arr[10] = {5, }
是不同的。 5將被存儲在一個[0]中,剩下的將被填入零。
我建議不要用這個全局變量,因爲它會增加數據段的大小。
從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};
作爲標準
A trailing comma may appear after the last expression in an array initializer and is ignored
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。雖然我喜歡這個答案,所以我要重新發布原始問題。]
[編程語言語法中尾隨逗號的歷史記錄]的可能重複(http://stackoverflow.com/questions/2311864/history-of-編程語言文法中的尾隨逗號) – 2013-05-07 08:35:24
[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
只是多餘的代碼。可以用arr替代[10] = {}; – Nikolai 2013-05-07 08:37:43