为什么更改数组的第0个索引比第0个索引变化更多?

时间:2019-06-11 06:42:41

标签: c++ arrays

bool a[10];
a[0] = 1;
for (bool& e : a) cout << e;

输出1000002000而不是我期望的1000000000。为什么是这样? 如果我将数组变大,则值会变得更加奇怪。

3 个答案:

答案 0 :(得分:8)

您的bool数组未初始化,因此到处都是垃圾。如果您在更改第一个索引([0])之前打印数组,则会看到更改其他部分的不是您的分配。

对于初始化,我建议这一行

bool a[10] = {false};

答案 1 :(得分:3)

您是否注意到自己的bool值之一是2?

这是程序行为为未定义时可能发生的许多事情之一,在您的情况下,这是因为您正在读取未初始化的非char数据。

bool a[10] = {};

是解决办法。

由于允许该语言假定bool类型只能存储falsetrue,因此允许使用<<上的ostream重载像

这样的代码
e + '0'

在输出bool类型e时。当然,这会给错误的初始化数据造成严重破坏!

答案 2 :(得分:2)

您不初始化数组。

使用memsetfill_nfor循环


memset(a, INIT_VALUE, sizeof(a)); // use only 0, -1 value, please.

fill_n(a, SIZE, INIT_VALUE); // or use this for save values.

for(bool &e : a) e = 0; // use loop init directly.