首页 > 解决方案 > C中“int arr[] = {}”和“int arr[]”的区别

问题描述

看下面的代码:

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   

为什么?

标签: cinitializationlist-initialization

解决方案


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

int arr[4];

使用花括号初始值设定项,您可以显式设置初始值,例如

int arr[4] = {1, 2, 3, 4};

但如果大括号中的数字个数小于数组的长度,则其余部分用零填充。这就是在这种情况下发生的事情:

int arr[4] = {};

请注意,这在 C 中无效,仅在 C++ 中有效,但您的编译器显然仍然允许它。在标准 C 中,您必须至少写入一个值:

int arr[4] = {0};

推荐阅读