我编写以下代码并在xcode中设置断点:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
int array[12];
return 0; //Set breakpoint here
}
调试器面板显示前6个元素包含非零int
s。这是为什么?
答案 0 :(得分:8)
int array[12];
这声明了一个包含12个元素的数组,而不是一个空数组。
此外,它声明它们没有初始化程序,它(在函数范围内)意味着它们将被默认初始化。对于int
,这意味着不执行初始化,结果int
将具有不确定的值。此行为在C ++规范中定义。
如果你想零初始化数组,那么你需要给它一个初始化器:
int array[12] = {};
这不是强制行为的原因是初始化会产生性能成本,并且某些程序可以正常工作而不需要受到惩罚。
答案 1 :(得分:2)
因为你只是声明数组,而不是初始化它。
当您声明发生的唯一事情是您保留一定的内存区域。已存储在该区域的内容可以是其他操作/程序遗留的任何内容。
答案 2 :(得分:1)
只保证全局变量和静态变量(包括数组)的初始值为零。对于本地数组(如在代码中),您可以使用以下命令初始化为零:
int array[12] = {0};
检查此链接以获取更多详细信息: How to initialize array to 0 in C?
答案 3 :(得分:0)
除非你告诉它,否则C ++编译器不会初始化变量。
答案 4 :(得分:0)
因为您的数组未初始化。调试器面板显示存储在该位置的先前值。