意外的无限循环数组 c

unexpected infinite loop array c

我正在自学编程。我遇到数组并试图将 for 循环的条件从 i < 5 更改为 i <=5 ,结果出乎意料,无限循环:

#include <stdio.h>

int main(void)
{
    int a[5] , i , j = 0;
    for (i=0;i<=5;i++)
    {
        a[i] = 2;
        printf("%d " , a[5]);
    }
    return 0;
}

我再次尝试了同样的方法,但这次使用了一个变量,但这次没有无限循环。

#include <stdio.h>

int main(void)
{
    int a[5] , i , j = 0;
    for (i=0;i<=5;i++)
    {
        a[i] = j;
        printf("%d " , a[5]);
    }
    return 0;
}

请向我解释为什么循环在第一种情况下是无限的,而在第二种情况下不是。

您将数组的大小声明为 5。因此有效索引为 0 到 4(含)。在循环的最后一次传递中,您写入位置 a[5],这会破坏恰好位于数组末尾后该地址的任何变量。这可能是您的循环变量 i,具体取决于编译器如何在内存中布置变量。结果通常是不可预测的。