c - C语言中 "int arr[] = {}"和 "int arr[]"的区别

标签 c initialization list-initialization

看下面的代码:

int arr[4];
for (int index = 0; index < 4; ++index) {
    printf("%d\t", arr[index]);
}

它打印随机值,如下所示:
27224   -6784   32766   0   

但是当我将 arr 设置为 {} 时,它​​会打印零。

int arr[4] = {};
for (int index = 0; index < 4; ++index) {
    printf("%d\t", arr[index]);
}
0   0   0   0   

为什么?

最佳答案

默认情况下,数组元素未初始化,这意味着它们将包含垃圾值:

int arr[4];

使用花括号初始值设定项,您可以显式设置初始值,例如
int arr[4] = {1, 2, 3, 4};

但是如果大括号中的数字数量小于数组的长度,则其余部分用零填充。这就是在这种情况下发生的事情:
int arr[4] = {};

请注意,这是 C 中的 not valid,仅在 C++ 中,但您的编译器显然允许它。在标准 C 中,您必须至少编写一个值:
int arr[4] = {0};

关于c - C语言中 "int arr[] = {}"和 "int arr[]"的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60883363/

相关文章:

c - RobuSTLy 以亚像素精度找到图像 block 的局部最大值

c - 使用 malloc 分配内存时出错

c - 如何初始化指向不同长度的字符数组的指针数组?

gcc - 如何在gcc中静态初始化__m128i数组?

c - 如何检查结构是否已初始化?

c++ - 实现定义的缩小转换?

c - 第二个整数计为 0

c - 使用 offsetof 执行指针运算示例

c++ - return {} 和 return Object{} 之间的区别

C++ 列表初始化允许多个用户定义的转换