c - 意外的无限循环数组 c

标签 c arrays infinite-loop

我正在自学编程。我遇到了数组并尝试将 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,具体取决于编译器如何在内存中放置变量。结果通常是不可预测的。

关于c - 意外的无限循环数组 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739958/

相关文章:

c - 告诉用户一个数字是否可以被另一个数字整除的程序

string - MIPS 问题 : Returning ($v0), 参数、jal 和 jr $ra(包含代码)

PHP 判断日期是否为数组的第一个元素

c# - 无需外部存储就地合并

c++ - 线程: Termination of infinite loop thread in c++

C程序,切换菜单死循环

c++ - 为什么int指针 '++'增加4而不是1?

c - Julia Set - 以 CUDA 为例 - 帮助我设置项目

c - 如何使用 printf 格式化 unsigned long long int?

php - 如果我需要这些键同时具有值​​(从数据库传递),如何将键添加到 PHP 数组?