这是什么初始化的含义:数组初始化Ç
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