为什么添加x + 1跳过10?

时间:2017-02-20 00:54:59

标签: c++ arrays for-loop

好的,所以我知道这是非常基本但我很困惑。当我运行此代码时:

int main(){
int arr[10];
for (int x = 1; x < 11; x++){
    arr[x] = x + 1;
    cout<< arr[10];
  }
}

输出为1,2,3,4,5,6,7,8,9,11。

为什么打印11而不是10 ???

2 个答案:

答案 0 :(得分:0)

每次循环播放时都会打印arr[10]arr[10]超出范围,因此您的程序具有未定义的行为。为什么未定义的行为表现得像它一样?可能的解释是你的程序已在这个实例中编译,以便arr[9]之后的堆栈上的下一个值是x,这个变量从1递增到10.你的程序因此分配给arr[x]并且碰巧打印x(这是对于前九次迭代的越界访问arr[10]读取的内容)。在第十次迭代中,它将11分配给arr[10]并打印出来。

答案 1 :(得分:0)

如果您创建这样的数组:int arr[10],那么,由于基于0的编号,您可以访问以下元素:arr[0], arr[1], ... arr[8], arr[9]。您的程序尝试访问超出此范围的元素arr[10],因此这是未定义的行为。