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并且不打印任何内容,因为循环因为该检查而退出.
i++是后增和++i是预递增。后自增是指对象自增后返回前一个值。预增是指对象自增然后返回。无论哪种方式,对象在计算其表达式时都会递增,这就是为什么您不会0作为第一个输出获得的原因。