Результат выражения 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
была оценена, и нет никакой гарантии, что либо будет увеличиваться до того умножение и присвоение. Следующие является одним из многих приемлемого порядка операций:
t1 <- b + 1
x <- a * t1
b <- b + 1
a <- a + 1
'0 <5' ......... – BLUEPIXY
Почему бы вам не попробовать? 'printf ('% d', a);' в цикле и посмотреть, что произойдет. –
@MarcB: потому что результат печати не был бы неоспоримым и даже встречным интуитивным? – njzk2