我正在处理一个问题,并尝试将数组初始化为0.这样,arr [value] = {0};当我声明一个数组时,它似乎给出了与它应该给出的输出不同的输出。这是代码:
代码:
案例1:
int count[2] = {0};
cout<<count[0];
cout<<count[1];
cout<<count[2];
给我输出: 001
然而,案例2:
int count[3] = {0};
cout<<count[0];
cout<<count[1];
cout<<count[2];
cout<<count[3];
给我输出: 0000
为什么会这样?我错过了什么吗? TIA。
答案 0 :(得分:3)
您的索引超出范围。在int count[2]
中,2
表示有2个成员,但您尝试显示3个成员。结果是未定义的。
答案 1 :(得分:2)
你出界了! 您只为两个整数分配了内存,而您正在访问第三个int。
编译器不执行绑定检查。这是程序员的工作。
数组索引以0
开头。
int count[2] = {0};
因此,您只能访问count[0]
和count[1]
。这是你的两个有效对象。
由于这个原因,你应该使用vectors
和成员函数at
执行绑定检查。
答案 2 :(得分:1)
int count[3] = {0};
然后
cout<<count[3]; // <-- out-of-bound array access yields undefined behaviour
答案 3 :(得分:0)
这是因为int count[2]
定义了一个只有两个条目的数组,所以有效索引只有0和1(而不是2)。
答案 4 :(得分:0)
C ++不是Visual Basic。
声明数组时,必须说明它将保留多少个元素。
如果您需要三个元素,请按以下方式声明:
int array[3];
并使用这样的三个元素:
array[0]
array[1]
array[2]
你将你的改变为1,然后尝试使用不存在的数组元素。