运行此程序时,如果n
的值设置为10,它将打印数组a
的索引和从a[0]
到a[9]
的存储值。但是,如果我将n
的值设置为大于10,那么它只会将a
到a[0]
的数组a[5]
的索引打印出来。有人可以向我解释为什么会这样吗?
#include <iostream>
using namespace std;
int main()
{
int a[10];
int i, n=11;
for(i=0; i<n; i++) {
a[i]= 5;
}
cout<<"The array is: \n";
for(i=0; i<n; i++)
{
cout<<"a["<<i<<"] = "<<a[i]<<endl;
}
return 0;
}
答案 0 :(得分:4)
如果增加n
超过数组大小的值(或等于从0开始索引),则超过数组的末尾。超过数组的末尾是未定义的行为。如果您的程序显示未定义的行为。任何事情都可能发生。 See this blog post from Microsoft for more on undefined behavior
如果您切换到std::array
而不是C数组并使用.at()
,那么会定义一些定义好的内容,您将获得std::out_of_range
异常。有关详情,请参阅http://en.cppreference.com/w/cpp/container/array/at和http://en.cppreference.com/w/cpp/container/array