关于C中的for循环的困惑:C语言中的增量逻辑

时间:2018-10-20 06:50:09

标签: c for-loop 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);
}

我的问题是:为什么a的输出不等于j的输出?我在想,如果j每次迭代都增加,并且j的值存储在a中,那为什么不一样?

6 个答案:

答案 0 :(得分:1)

002条件下,j<=3的值将分配给j,但此后a递增1(j == 4)时,它将从循环,因为j的值现在为j,并且没有将4的值分配给j。所以最后我们得到aa=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"