我不理解以下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
。我不知道它为什么会这样。我做错了什么?
答案 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的值。