C++ 为什么我在迭代时没有得到一个越界数组错误?

C++ 为什么我在迭代时没有得到一个越界数组错误?,c++,arrays,loops,indexoutofboundsexception,C++,Arrays,Loops,Indexoutofboundsexception,所以我建立了一个简单的数组并对其进行迭代。对于每个元素,数组[i]都用100的值填充。我之所以这样做是因为对于一个包含五个元素的数组,数组[5]显然不存在 如果数组索引为0,为什么编译器不会对我发火?数组[5]不应存在 using namespace std; int main() { int array[5]; for (int i = 0; i < 5; i++) { array[i] = 100; } for (int i

所以我建立了一个简单的数组并对其进行迭代。对于每个元素,数组[i]都用100的值填充。我之所以这样做是因为对于一个包含五个元素的数组,数组[5]显然不存在

如果数组索引为0,为什么编译器不会对我发火?数组[5]不应存在

using namespace std;

int main()
{
    int array[5];
    for (int i = 0; i < 5; i++)
    {
        array[i] = 100;
    }

    for (int i = 0; i < 5; i++)
    {
        cout << array[i] << "\n";
    }
}
因此,在该代码中没有数组越界。

如果i<5,那么它必须是4或更小,这意味着最大值是数组[4],这不是越界


我想你一定是把它和做I混为一谈了。你从来没有接触过a[5]。您只对[0]、a[1]、a[2]、a[3]、a[4]进行了迭代。因此它不会引发任何错误。在循环条件中,您在声明int数组[5]时编写了i;,5不涉及任何索引。。它是指元素的数量。但只有在这一点上。。。当你申报时。稍后,您可以通过索引0-4访问数组,这是因为i<5


即使您要访问数组[5],也不能保证您的编译器会崩溃。。。但这可能是另一个话题,或者

i<4表示i的最大值为3。i<5表示i的最大值为4。这是正确的,您从未访问数组[5],因此代码中没有数组超出范围。您的代码没有超出数组的范围。但即使是这样,也不能保证会有什么事让你抓狂。越界是未定义的行为,这意味着任何事情都可能发生。数组[4]是正确的,然后将i增加到5,然后检查i为什么我没有得到错误?1.因为您不访问数组[5]。2.因为即使您执行了未定义的行为,也不意味着会显示错误。在您的上一个循环中,更改为cout,那么为什么不访问数组[5]。等等,我看,它是5<5是false,所以永远不会访问数组[5]。如果我输入6,是否会出现错误?@ShahJacob如果您试图读取或写入数组[5]的值,则程序的行为将是未定义的。它可能会产生一个错误,它可能看起来有效,或者它可能会导致恶魔从你的鼻子里飞出来。@ShahJacob你可能想了解一下未定义的行为:@ShahJacob它可能会导致恶魔从你的鼻子里飞出来。不过,不要害怕。虽然这可能发生,但直到现在我都没有发生过。这可能是有道理的。你是说数组[5]永远不会到达,因为5<5的条件是假的吗?是的,就是这样。当i=0,1,2,3,4时,它运行5次,然后下一次迭代将设置i=5,因此它在再次进入for块之前停止,因为5<5返回false
int array[5];
for (int i = 0; i < 5; i++)
{
    array[i] = 100;
}
int array[5];
array[0] = 100;
array[1] = 100;
array[2] = 100;
array[3] = 100;
array[4] = 100;