意外的无限循环数组c

时间:2015-09-23 12:43:22

标签: c arrays infinite-loop

我正在学习自己的编程。我遇到了数组,并试图改变i&lt; for循环的条件。 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;
}

请向我解释为什么循环首先是无限的而不是第二种情况。

1 个答案:

答案 0 :(得分:3)

您声明您的数组大小为5.因此有效索引为0到4(含)。在循环的最后一遍中,你写入位置a [5],它会破坏在阵列结束后立即生活在该地址的任何变量。那可能是你的循环变量i,这取决于编译器如何在内存中放置变量。结果通常是不可预测的。