循环数组-超出值 我开始学习C++中的数组,我似乎不明白为什么数组在循环超过了它们返回的值之后继续下去。 int array[5] = {0, 1, 2, 3, 4} int i; i=0; for (i=0, i < 9, i+=2) { printf("%d ", array [i]); } int数组[5]={0,1,2,3,4} int i; i=0; 对于(i=0,i C++中的数组基本上是指针和偏移量的语法包装器。数组变量可以传递给同一类型的指针参数 array[i]

循环数组-超出值 我开始学习C++中的数组,我似乎不明白为什么数组在循环超过了它们返回的值之后继续下去。 int array[5] = {0, 1, 2, 3, 4} int i; i=0; for (i=0, i < 9, i+=2) { printf("%d ", array [i]); } int数组[5]={0,1,2,3,4} int i; i=0; 对于(i=0,i C++中的数组基本上是指针和偏移量的语法包装器。数组变量可以传递给同一类型的指针参数 array[i],c++,for-loop,C++,For Loop,为什么数组打印出0的值或4之后的随机数 *我知道我正在打印第1、第3、第5、第7和第9个数字我是一名C#开发人员,但在我看来,您有一个包含5个元素的数组,您试图打印不存在的元素。 尝试将初始语句更改为: int数组[9]={0,1,2,3,4,5,6,7,8,9} 看看这是否有效。因为数组索引语法只是数学的快捷方式: 同: *(array + i) 在您的例子中,数学恰好计算出内存中存在的地址,该地址可由您的程序寻址,并且包含一些随机数据 访问此数据称为错误。您正在打印一个只有5个数字的数组的

为什么数组打印出0的值或4之后的随机数

*我知道我正在打印第1、第3、第5、第7和第9个数字

我是一名C#开发人员,但在我看来,您有一个包含5个元素的数组,您试图打印不存在的元素。 尝试将初始语句更改为: int数组[9]={0,1,2,3,4,5,6,7,8,9}
看看这是否有效。

因为数组索引语法只是数学的快捷方式:

同:

*(array + i)
在您的例子中,数学恰好计算出内存中存在的地址,该地址可由您的程序寻址,并且包含一些随机数据


访问此数据称为错误。

您正在打印一个只有5个数字的数组的第1、第3、第5、第7和第9个数字

超过第5个数字后,将从内存中打印不属于数组的未定义值


为什么循环会持续超过阵列的实际长度?因为你告诉它,C++会允许。

< p> C++中的数组基本上是指针和偏移量的语法包装器。数组变量可以传递给同一类型的指针参数

array[i]

*(array + i)
C++不像Java或C#那样对数组进行边界检查。原则是C++语言不做任何你不要求的事情。检查是否正在访问超出边界的数组并引发异常会增加开销,如果您知道将在边界内访问,则不需要这样做

当您访问应用程序仍然可以访问的越界内存时,最终得到的是未初始化的内存

可以通过编程获得数组中正确的元素数,或者对于相同的代码,可以使用std::vector并检查大小()

#包括
向量VAL={0,1,2,3,4};
对于(int i=0,i
问题中缺少循环主体。您正在进入未定义的行为区域。任何事情都会发生,没有承诺。它可能会工作,它可能会崩溃和燃烧。好的,我会问你——当你犯这个错误时,程序应该怎么做?你的
for
语法甚至都不正确。你想做什么?试图以欺骗的方式结束,即使它不是严格意义上的欺骗。据你所知,他可能正在打印平行宇宙中定义良好的值。这个答案有什么错,我被激怒了?有人已经提到该行为未定义(正确)。所以我只是说了该怎么做来修复它(而不是重复那个回答。)也许我应该停止帮助。。。。
*(array + i)
#include <vector>

std::vector<int> vals = {0, 1, 2, 3, 4};
for (int i=0, i < vals.size(), i+=2)
{
    printf("%d ", array [i]);
}