数组的空初始化变化输出

时间:2016-07-17 12:20:12

标签: c++ arrays

我正在处理一个问题,并尝试将数组初始化为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

Case 1 Case 2

为什么会这样?我错过了什么吗? TIA。

5 个答案:

答案 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,然后尝试使用不存在的数组元素。