Ответ 1
Он анализируется как c = a++ + b
, а a++
означает пост-инкремент, т.е. приращение после принятия значения a
для вычисления a + b == 2 + 5
.
Пожалуйста, никогда не пишите такой код.
Следующий код меня смутил
int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
Я ожидал, что выход будет 3,5,8, главным образом потому, что ++ означает 2 +1, что равно 3, а 3 + 5 равно 8, поэтому я ожидал 3,5,8. Оказывается, результат 3,5,7. Может кто-нибудь объяснить, почему это так?
Он анализируется как c = a++ + b
, а a++
означает пост-инкремент, т.е. приращение после принятия значения a
для вычисления a + b == 2 + 5
.
Пожалуйста, никогда не пишите такой код.
Maximal Runch применяется к такому выражению, согласно которому выражение анализируется как:
c = a++ + b;
То есть a
пост-инкрементируется (a++
), поэтому текущее значение a
(до пост-инкремента) берется для операции +
с b
.
a ++ является пост-приращением, то есть выражение принимает значение a, а затем добавляет 1.
c = ++ a + b будет делать то, что вы ожидаете.
Это пример плохого стиля программирования.
Это довольно непроницаемо, однако он добавляет значение a
, поэтому он суммирует текущее значение a
с b
и затем увеличивает a
!
a ++ получает оценку после выражения.
c = ++ a + b; даст вам то, что вы подумали.
Оператор post increment, a ++, изменяет значение tge a после того, как значение a оценивается в выражении. Поскольку исходное значение a равно 2, то, что используется для вычисления c; значение a изменяется для отражения нового значения после оценки ++.
a ++ + b..it дает результат 7 и после того, как значение выражения a обновляется до 3 из-за оператора post increment
В соответствии с самым длинным совпадением оно анализируется как ++ + + b во время фазы лексического анализа компилятора. Следовательно, результат.