数组初始化C.

这个初始化是什么意思:

char arr[10] = { 0, }; 

我熟悉char arr[10] = {0}; 它将所有元素设置为零,并使用char arr[10] = {1,2}; 它将前两个元素设置为1和2(ascii),其余元素设置为0.我不熟悉上面的格式。 快速测试显示它可能就像char arr[10] = {0}; ,还有其他我不知道的意思吗?

是的,它与没有尾随逗号的版本相同。

有关尾随逗号的更多讨论,请参阅此问题 。

从如何将数组的所有成员初始化为相同的值? :

将所有成员初始化为相同的值:

 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

char arr[10] = { 0, };char arr[10] = {0}在这种情况下是相同的。

char arr[10] = {5, }是不同的。 5将被存储在[0]中并且剩余将被填充为零。

我建议不要将它用于全局变量,因为它会增加数据部分的大小。

int arr[3] ={0,};之间没有区别int arr[3] ={0,};int arr[3] ={0};

参考:C11 6.7.9:

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

两种forms的初始化列表都被视为初始化程序。 最后使用逗号的表单是很多人喜欢的,因为它可以在代码维护期间更容易地重新排列或添加元素到列表中。

  int arr[3] ={0,}; 

声明一个包含三个元素的数组,并将第一个元素初始化为0.当您进行部分初始化时,数组的其余部分将自动使用零初始化。

参考。 C11 6.7.9:

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同。

[我为另一个问题写了这个答案,但它被关闭了。 我虽然喜欢这个答案,所以我会重新提出原来的问题。