繁体   English   中英

C 中的 For 循环无法按预期工作

[英]For Loop in C does not work as Expected

我不明白以下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 我不知道为什么它的行为是这样的。 我究竟做错了什么?

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

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

循环应该是这个 -

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

您的操作系统不会影响循环的处理方式。 您需要的是一种处理整数变量“k”的方法,并且在循环内部,您需要使“k”大于 10 才能使循环正确退出。 所以我使 K 递增,以便整数数组“a”的每个元素都包含值 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;
}

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

第一个成员 - a[0]; 第二个成员 - a[1]; 第三名成员 - a[2]; …… …… 第 10 名成员 - a[9]

因此,您不能拥有成员 a[10]。 但是在您的 for 循环中,您将 k 从 0 开始并将其增加到 10。但是 a[10] 不存在于数组中,这导致了无限循环。 要解决这个问题,只需使用“k<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 的内存范围之后。 因此,当您将 a[10] 更改为 1 时,它实际上会更改 k 的值。 所以,你得到 1 作为 k 的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM