[英]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.