甚至在超过C ++中初始化数组的限制之后的结果

时间:2017-04-30 18:14:33

标签: c++ arrays

在将数组初始化到某个限制之后再将数组打印出该限制之后,它仍然会打印结果。为什么?

Example :

    #include <iostream>
     using namespace std;
     int main() {
        int A[2] = {};
        cout << A[0] << "\n";
        cout << A[1] << "\n";
        cout << A[2] << "\n";
        cout << A[3] << "\n";
        cout << A[4] << "\n";
        return 0;
   }

输出是:

    0
    0
    0
    0
   -13120

这里我刚刚将数组初始化到2个位置。但我仍然得到A [2],A [3]等的结果。

2 个答案:

答案 0 :(得分:4)

越过限制会导致未定义的行为(UB)。它可以打印并且看起来像正常工作,它可能会崩溃,它可能会卡住,或者它可能是任何东西。

所以,如果它有时有效,你不应该依赖它。

答案 1 :(得分:2)

超出数组的边界是未定义的行为。这意味着程序可能什么都不做,可能会打印一些东西,可能会退出程序,可能......行为根本就没有定义。 所以打印出来的东西仍然是一种可能的行为,但你不能依赖这种行为。