在C中while循环中的后递增

alg*_*lgo 10 c while-loop pre-increment post-increment

这是一个非常简单的C程序:

int main()
{
    int i = 0;
    while(i++ < 10)
         printf("%d\n", i);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

为什么0不打印第一个数字?如果我更换了i++,++i我会得到这个:

1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

对于两者而言i++,++i第一个数字是1.
我期望0在while循环中看到for post增量while().
谢谢.

pax*_*blo 11

i++(和++i)作为的一部分进行while表达的评价,这恰好之前打印.这意味着它将始终打印1.

i++++i变体之间的唯一区别是当增量发生在表达式本身内部时,这会影响打印的最终值.每个的等效伪代码是:

while(i++ < 10)            while i < 10:
                               i = i + 1
    printf("%d\n", i);         print i
                           i = i + 1
Run Code Online (Sandbox Code Playgroud)

和:

                           i = i + 1
while(++i < 10)            while i < 10:
    printf("%d\n", i);         print i
                               i = i + 1
Run Code Online (Sandbox Code Playgroud)

让我们说起i来吧9.使用i++ < 10,它9 < 10用于while表达式然后i在打印之前递增到10.因此检查使用9然后打印10.

++i < 10时,它首先递增i 然后使用10 < 10用于while表达.因此检查使用10并且打印任何内容,因为循环因为该检查而退出.


0x4*_*2D2 5

i++后增++i预递增。后自增是指对象自增后返回前一个值。预增是指对象自增然后返回。无论哪种方式,对象在计算其表达式时都会递增,这就是为什么您不会0作为第一个输出获得的原因。