数组不能在C ++中正确打印

时间:2017-06-29 15:23:02

标签: c++ arrays

运行此程序时,如果n的值设置为10,它将打印数组a的索引和从a[0]a[9]的存储值。但是,如果我将n的值设置为大于10,那么它只会将aa[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;
}

1 个答案:

答案 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/athttp://en.cppreference.com/w/cpp/container/array