2013-05-07 36 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。虽然我喜欢这个答案,所以我要重新发布原始问题。]