Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么更改数组的第0个索引比更改第0个索引更重要? boola[10]; a[0]=1; 对于(bool&e:a)cout_C++_Arrays - Fatal编程技术网

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]={}。您不初始化数组,除了
a[0]
。未初始化的局部变量(包括数组的所有元素)实际上是未初始化的。它们的值将是不确定的,在C++中使用任何类型的不确定值导致未定义的行为。您也应该在赋值之前打印数组元素给定一个非动态数组,与Jains answer相比,初始化赋值可能是一个更好的选择。尽管如此,您还是应该将添加内容编辑到实际答案中,这样您很快就可以写评论了;)
bool a[10] = {};
e + '0'