对于C中的循环不能按预期工作

时间:2015-09-24 05:25:05

标签: c for-loop

我不理解以下for循环的流程:它变成了一个无限循环。我使用的是ubuntu 12.04。我在这里做错了吗?

#include <stdio.h>
main()
{
    int k,a[10];
    for(k=0; k<=10; k++)
    {
        a[k]=1;
        printf("k = %d\n",k);
    }
}

k == 9后,它会自动更改为1。我不知道它为什么会这样。我做错了什么?

3 个答案:

答案 0 :(得分:5)

 for(k=0; k<=10; k++)

此访问超出绑定索引。 a[10](索引从{{1}开始,因此有效索引0)超出范围并调用未定义的行为

循环应该是这个 -

0-9

答案 1 :(得分:0)

您的操作系统不会影响循环的处理方式。你需要的是一种处理整数变量的方法&#34; k&#34;在循环内部,你需要制作&#34; k&#34;大于10,循环正确退出。所以我做了K增量,以便整数数组的每个元素&#34; a&#34;包含值1。

#include <stdio.h>
int main()
{
int k,a[11];
for(k=0; k<=10; k++)
{
    a[k]=1;
    printf("k = %d\n",k);
    k++;
}
return 0;
}

答案 2 :(得分:0)

实际上数组索引从0开始。所以如果你有一个包含10个成员的数组“a”,那么成员将是

第1名成员 - a [0]; 第二名成员 - a [1];第3名成员 - a [2]; ...... ......第10名成员 - [9]

所以,你不能拥有一个成员[10]。但是在你的for循环中,你从0开始k并将其增加到10.但是数组中没有[10],这导致了无限循环。要解决此问题,只需使用“k&lt; 10”作为循环条件。您的代码现在应该如下所示:

#include <stdio.h>
main()
{
    int k,a[10];
    for(k=0; k<10; k++)
    {
        a[k]=1;
        printf("k = %d\n",k);
    }
}

k在9之后变为1的原因是由于某种原因k位于a的存储范围之后。因此,当您将[10]更改为1时,它实际上会更改k的值。所以,你得到1作为k的值。