bool a[10];
a[0] = 1;
for (bool& e : a) cout << e;
输出1000002000
而不是我期望的1000000000。为什么是这样?
如果我将数组变大,则值会变得更加奇怪。
答案 0 :(得分:8)
您的bool数组未初始化,因此到处都是垃圾。如果您在更改第一个索引([0]
)之前打印数组,则会看到更改其他部分的不是您的分配。
对于初始化,我建议这一行
bool a[10] = {false};
答案 1 :(得分:3)
您是否注意到自己的bool
值之一是2?
这是程序行为为未定义时可能发生的许多事情之一,在您的情况下,这是因为您正在读取未初始化的非char
数据。
bool a[10] = {};
是解决办法。
由于允许该语言假定bool
类型只能存储false
或true
,因此允许使用<<
上的ostream
重载像
e + '0'
在输出bool
类型e
时。当然,这会给错误的初始化数据造成严重破坏!
答案 2 :(得分:2)
您不初始化数组。
使用memset
,fill_n
或for
循环
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.