3

我编写以下代码并在 xcode 中设置断点:

#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
    int array[12];
    return 0;        //Set breakpoint here
}

在此处输入图像描述

调试器面板显示前 6 个元素包含非零int。为什么是这样?

4

5 回答 5

7
int array[12];

这声明了一个包含 12 个元素的数组,而不是一个空数组。

此外,它在没有初始化程序的情况下声明它们,这(在函数范围内)意味着它们将被默认初始化。因为int这意味着不执行初始化,结果ints 将具有不确定的值。此行为在 C++ 规范中定义。

如果你想对数组进行零初始化,那么你需要给它一个初始化器:

int array[12] = {};

这不是强制行为的原因是初始化会产生性能成本,并且某些程序被编写为可以正常工作而无需遭受这种惩罚。

于 2013-10-07T19:36:44.633 回答
2

因为你只声明了数组,没有初始化它。

当您声明时,唯一发生的事情就是您保留了一定的内存区域。已经存储在该区域的内容可以是其他操作/程序遗留下来的任何内容。

于 2013-10-07T19:35:15.723 回答
1

只有全局和静态变量(包括数组)才能保证初始值为零。对于本地数组(如在您的代码中),您可以使用以下方法初始化为零:

int array[12] = {0};

查看此链接以获取更多详细信息: 如何在 C 中将数组初始化为 0?

于 2013-10-07T19:36:23.247 回答
0

除非您告诉它,否则 C++ 编译器不会初始化变量。

于 2013-10-07T19:34:14.563 回答
0

因为你的数组没有初始化。调试器面板向您显示存储在该位置的先前值。

于 2013-10-07T19:34:43.973 回答