c中for循环的困惑:c语言中的自增逻辑

Confusion about for loop in c: increment logic in c language

我对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 中,那么为什么不一样?

直到 j<=3 条件 j 的值被分配给 a 但在那之后当 j 递增 1 (j==4) 时,它中断从循环中退出,因为 j 的值现在是 4 并且它没有将 j 的值分配给 a。所以最后我们得到 a=4j=3.

对于j=0 a=0

对于j=1 a=1

对于j=2 a=2

对于j=3 a=3

对于j=4循环终止,因为j<=3变为假,所以j值为4,a值为3。

这是由于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

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。

希望对您有所帮助。

第一名:

 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

当我们在循环概念中使用前缀递增时,我们应该小心一点。

For j=0 a=0 # 第一次迭代

For j=1 a=1 #第二次迭代

For j=2 a=2 # 第三次迭代

For j=3 a=3 #第4次迭代

For j=4 因为条件不满足,控制从for循环中出来。但是 j 值较早递增,因此它输出 "4".