C++ 为什么更改数组的第0个索引比更改第0个索引更重要? boola[10]; a[0]=1; 对于(bool&e:a)cout
您不需要初始化数组 使用C++ 为什么更改数组的第0个索引比更改第0个索引更重要? boola[10]; a[0]=1; 对于(bool&e:a)cout,c++,arrays,C++,Arrays,您不需要初始化数组 使用memset,fill\n或进行循环 bool a[10]; a[0] = 1; for (bool& e : a) cout << e; 您的bool数组未初始化,因此充满了垃圾。如果在更改第一个索引([0])之前打印数组,您将看到更改其他部分的不是您的分配 对于初始化,我建议使用这一行 memset(a, INIT_VALUE, sizeof(a)); // use only 0, -1 value, please. fill_n(a, SI
memset
,fill\n
或进行循环
bool a[10];
a[0] = 1;
for (bool& e : a) cout << e;
您的bool数组未初始化,因此充满了垃圾。如果在更改第一个索引([0]
)之前打印数组,您将看到更改其他部分的不是您的分配
对于初始化,我建议使用这一行
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.
您是否注意到您的bool
值之一是2
这是程序行为未定义时可能发生的许多事情之一,在您的情况下,这是因为您正在读取未初始化的非char
数据
bool a[10] = {false};
这是解决办法
由于允许该语言假定bool
类型只能存储false
或true
,因此数组的其余部分未初始化,请尝试bool a[10]={}改为code>。您不初始化数组,除了a[0]
。未初始化的局部变量(包括数组的所有元素)实际上是未初始化的。它们的值将是不确定的,在C++中使用任何类型的不确定值导致未定义的行为。您也应该在赋值之前打印数组元素给定一个非动态数组,与Jains answer相比,初始化赋值可能是一个更好的选择。尽管如此,您还是应该将添加内容编辑到实际答案中,这样您很快就可以写评论了;)
bool a[10] = {};
e + '0'