我开始学习C++中的数组,我似乎不能理解为什么在超过循环之后数组还会继续,以及它们返回的值。
int array[5] = {0, 1, 2, 3, 4}
int i;
i=0;
for (i=0, i < 9, i+=2)
{
printf("%d ", array [i]);
}为什么数组输出的值是0或4之后的随机数?
*我知道我打印的是第一,第三,第五,第七和第九个数字
发布于 2014-11-07 06:44:23
您将打印出一个只有5个数字的数组的第1、3、5、7和9个数字。
超过第5个数字后,将从不属于数组的内存中打印未定义的值。
为什么循环会继续超出数组的实际长度?因为是你让它这么做的,C++会允许的。
发布于 2014-11-07 06:41:33
因为数组索引语法只是pointer数学的快捷方式:
array[i]与以下内容相同:
*(array + i)在您的例子中,该数学运算恰好计算出存在于内存中的一个地址,该地址可由您的程序寻址,并且包含一些随机数据。
访问这些数据被称为buffer overflow错误。
发布于 2014-11-07 06:54:09
C++中的数组基本上是指针和偏移量的语法包装器。数组变量可以传递给相同类型的指针参数。
array[i]等同于
*(array + i)C++不会像Java或C#那样对数组进行边界检查。C++的原则是,该语言不会做任何你没有要求的事情。检查您是否正在访问超出边界的数组并抛出异常会增加开销,如果您知道将在边界内访问,这是不必要的。
当您访问应用程序仍然可以访问的边界内存时,最终得到的是未初始化的内存。
您可以通过编程获得数组中正确的元素数量,或者对于相同的代码,您可以使用std::vector并检查size():
#include <vector>
std::vector<int> vals = {0, 1, 2, 3, 4};
for (int i=0, i < vals.size(), i+=2)
{
printf("%d ", array [i]);
}https://stackoverflow.com/questions/26790651
复制相似问题