while循环使用++变量

时间:2014-10-28 19:12:34

标签: c loops while-loop

很抱歉这个简单的问题但我找不到答案,如果我有一个看起来像这样的while循环。它是在比较之前还是之后计算的?

a = 0;
while(a++ < 5)
{
    ....

当它第一次运行循环时,它会将其视为&#34; 1&lt; 5&#34;或&#34; 0&lt; 5&#34 ;.感谢

3 个答案:

答案 0 :(得分:2)

比较是在 BEFORE 增量之前完成的,但是循环体看到值 AFTER icrementation。因此,在第一次运行中,您将比较0&lt; 5,但在循环中a的值为1.

答案 1 :(得分:1)

在&#34;之后应用后缀运算符&#34;。在&#34;之前应用前缀运算符&#34;。在您第一次提供的情况下,&#39; a&#39;比较它的值将等于0

请注意,如果不小心使用,可能会对这些操作员造成麻烦。考虑一个[ix ++] = a [ix] + 1;也许它会做你想要的,也许不是......试试吧

请阅读其他评论...非常好的观点,即将采用++值 insde 循环。

答案 2 :(得分:1)

表达式a++的结果是a的当前值,因此循环将以while ( 0 < 5 )开头。

表达式++a的结果是a + 1的值,所以如果你写了while ( ++a < 5 ),它将以while ( 1 < 5 )开头。

在这两种情况下,a将作为副作用递增1。请注意,在评估表达式后不必立即应用副作用;唯一的保证是它在下一个序列点之前应用(在这种特殊情况下,序列点位于条件表达式的末尾,因此循环体将看到更新的a值)。所以,如果你有一个像

这样的表达式
x = a++ * ++b;

它将评估x = a * (b + 1),但不保证a在评估++b之前会增加,也不保证可以保证在乘法和赋值之前增加任何一个。以下是许多可接受的操作顺序之一:

  1. t1 <- b + 1
  2. x <- a * t1
  3. b <- b + 1
  4. a <- a + 1