c - 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
为什么?
解决方案
默认情况下,数组元素未初始化,这意味着它们将包含垃圾值:
int arr[4];
使用花括号初始值设定项,您可以显式设置初始值,例如
int arr[4] = {1, 2, 3, 4};
但如果大括号中的数字个数小于数组的长度,则其余部分用零填充。这就是在这种情况下发生的事情:
int arr[4] = {};
请注意,这在 C 中无效,仅在 C++ 中有效,但您的编译器显然仍然允许它。在标准 C 中,您必须至少写入一个值:
int arr[4] = {0};
推荐阅读
- git - 如何注入中间分支?
- replace - 在特定情况下替换特定单元格的文本
- java - 为什么在外部参数化类中创建一个组件类型为内部类的数组被视为“通用数组创建”?
- mysql - mysqldump 失败并显示“跳过表 'table1' 的转储数据,它没有字段”
- java - 使用 fabric8 API 检查 kubernetes cron 作业
- github - 从远程存储库中提取而不更改更新的本地文件
- python-3.x - 从 mongodb 集合中查找特定值
- shell - 不可打印的字符未被识别为字段分隔符
- amazon-web-services - 开发 AWS Lambda 函数时要在 API Gateway 代理请求事件中使用哪些属性?
- python-3.x - 在跟踪这个与 python 迭代器和生成器有关的函数时需要帮助