我对C语言的循环增量基本概念感到困惑。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int j=0;int a;
for(j;j<=3;++j)
{
printf("hello\n");
a=j;
}
printf("%d,%d\n",j,a);
}
我的问题是:为什么a的输出不等于j的输出?我在想,如果j
每次迭代都增加,并且j
的值存储在a
中,那为什么不一样?
答案 0 :(得分:1)
在002
条件下,j<=3
的值将分配给j
,但此后a
递增1(j == 4)时,它将从循环,因为j
的值现在为j
,并且没有将4
的值分配给j
。所以最后我们得到a
和a=4
。
答案 1 :(得分:1)
对于j=0
a = 0
对于j=1
a = 1
对于j=2
a = 2
对于j=3
a = 3
对于j=4
循环,由于j<=3
变为假而终止,因此j值为4且值为3。
答案 2 :(得分:0)
这是因为for循环中3个表达式的执行方式。
考虑
for( exp1; exp2; exp3)
{
body;
}
这将被执行为:
exp1;
if (exp2 == false) goto end_of_loop;
body;
exp3;
if (exp2 == false) goto end_of_loop;
body;
exp3;
if (exp2 == false) goto end_of_loop;
body;
exp3;
if (exp2 == false) goto end_of_loop;
. . .
. . .
end_of_loop:
如您所见,exp3
总是在body
之后执行一次。
因此,在您的情况下,j
将在分配给a
之后增加一倍。
喜欢:
a=j; // part of body
++j; // exp3
j<=3 (exp2) becomes false and the loop ends
答案 3 :(得分:0)
for
循环在每次迭代时检查条件。因此,当您初始化j=0
时,要满足以下条件:在每次迭代后递增j<=3
的值的同时,循环执行以下代码直到j
,该循环执行相同的操作。
因此对于第一次迭代,j为0,因此条件得到满足,并且a
的值为j
。现在j
的值增加1。一直持续到j = 3。
当j = 3时,a也等于3。现在,j的值增加1,等于4。现在检查条件。自j!=3
起,循环中断,您退出循环。因此,尽管j = 4,但a仍为3。
希望有帮助。
答案 4 :(得分:0)
第一:
j = 0
j <= 3 => print hello and a = 0, ++j
第二:
j = 1
j <= 3 => print hello and a = 1, ++j
第三名:
j = 2
j <= 3 => print hello and a = 2, ++j
第四名:
j = 3
j <= 3 => print hello and a = 3, ++j
第五名:
j = 4 not satisfy j <= 3
所以j = 4且a = 3
答案 5 :(得分:0)
在循环概念中使用前缀递增时,我们应该格外小心。
For j=0 a=0
#第一次迭代
For j=1 a=1
#2次迭代
For j=2 a=2
#第三次迭代
For j=3 a=3
第4次迭代
对于j=4
,因为不满足条件,所以控制脱离了for循环。但是j
的值会较早地增加,因此它输出"4"
。