c语言中for循环的混淆:c语言中的增量逻辑
我对循环增量的C语言的基本概念感到困惑。这是我的代码:c语言中for循环的混淆:c语言中的增量逻辑,c,for-loop,increment,post-increment,pre-increment,C,For Loop,Increment,Post Increment,Pre Increment,我对循环增量的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); } #包括 #包括 int main() { int j=0;int a
#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);
}
#包括
#包括
int main()
{
int j=0;int a;
对于(j;jTilljTilljforj=0
a=0
对于j=1
a=1
对于j=2
a=2
对于j=3
a=3
对于j=4
a=0,循环终止为j
对于j=1
a=1
对于j=2
a=2
对于j=3
a=3
Forj=4
循环被终止为j这是由于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;//身体的一部分
++j、 //exp3
这是由于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;//身体的一部分
++j、 //exp3
jfor
循环在每次迭代时检查条件。因此,当初始化j=0
时,给出以下代码循环到jfor
循环在每次迭代时检查条件。因此,当初始化j=0
时,给出以下代码循环到的条件<代码>j1:
j=0
j打印hello,a=0,++j
第二:
j=1
j打印hello,a=1,++j
第三:
j=2
j打印hello和a=2,++j
第四:
j=3
j打印hello和a=3,++j
第五:
j=4不满足j1:
j=0
j打印hello,a=0,++j
第二:
j=1
j打印hello,a=1,++j
第三:
j=2
j打印hello和a=2,++j
第四:
j=3
j打印hello和a=3,++j
第五:
j=4不满足j当我们在循环概念中使用前缀递增时,我们应该小心一点
j=0a=0的第1次迭代
j=1 a=1的#第二次迭代
j=2 a=2的#第三次迭代
j=3 a=3的#第四次迭代
对于j=4
,当条件不满足时,控制从For循环中出来。但是j
值提前递增,因此它输出“4”
,当我们在循环概念中使用前缀递增时,我们应该谨慎一点
j=0a=0的第1次迭代
j=1 a=1的#第二次迭代
j=2 a=2的#第三次迭代
j=3 a=3的#第四次迭代
对于j=4
,当条件不满足时,控制从For循环中出来。但是j
值提前递增,因此它输出“4”
,因为j
在分配给a
后递增。(我也不会在循环控制的第一部分中为写j
。它什么也不做。我会为(j=0;j感谢@JonathanLeffler!现在我的困惑被消除了。:)因为j
在分配给a
后会递增。(我也不会在循环控制的第一节中为写j
。它什么也不做。我会为(j=0;j感谢@JonathanLeffler!现在我的困惑已经消除了。)
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