arrays - 我应该使用 {} 还是 {0} 来初始化数组/结构?

标签 arrays c struct initialization braced-init-list

<分区>

我模糊地记得读过像 int x[4] = {}; 这样用于将结构/数组初始化为默认值的代码依赖于非标准(但广泛使用)的扩展首次出现在 gcc 中,正确的版本(显然在标准中说明)是 int x[4] = { 0 };

这是正确的吗?

最佳答案

在 C 中,初始化列表是这样定义的

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

在C++中是这样定义的

braced-init-list:
{ initializer-list ,opt }
{ }

如您所见,C++ 允许空的大括号初始化列表,而在 C 中初始化列表不能被省略。

所以你可以用C++写

int x[4] = {}; 

但是在 C 中,这个定义不满足标准(尽管它可以是实现定义的语言扩展)。所以你必须写

int x[4] = { 0 };

在这两种情况下,数组的元素都将被零初始化。

关于arrays - 我应该使用 {} 还是 {0} 来初始化数组/结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461887/

相关文章:

c - 我怎样才能在同一个管道上写两次?

c - 使用 bsearch 其键值相当于数组元素,即指向 c 中 char 的指针

java - 在 Java 中初始化二维数组

java - 将 Arraylist<Arraylist<Integer>> 转换为 json

java - 查找二维数组中非零数沿轴的索引

c - 如何设置结构体数组的 "end"

C++ 将结构从一个类传递到另一个类

java - 如何检查 boolean 数组是否包含所有真值?

c - 为什么这个C scanf会自动跳过呢?

c++ - 错误 : no match for operator<<