好的,所以我知道这是非常基本但我很困惑。当我运行此代码时:
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 ???
答案 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]
,因此这是未定义的行为。