Что означает операция c = a +++ b? - PullRequest
31 голосов
/ 20 сентября 2011

Следующий код меня смущает

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);

Я ожидал, что результат будет 3,5,8, главным образом потому, что a ++ означает 2 +1, что равно 3, а 3 + 5 равно 8, поэтому яожидается 3,5,8.Получается, что результат 3,5,7.Может кто-нибудь объяснить, почему это так?

Ответы [ 9 ]

90 голосов
/ 20 сентября 2011

Он анализируется как c = a++ + b, а a++ означает постинкремент, то есть приращение после взятия значения a для вычисления a + b == 2 + 5.

Пожалуйста, никогда напишите такой код:

39 голосов
/ 20 сентября 2011

Максимальное правило Мунка применяется к такому выражению, в соответствии с которым выражение анализируется как:

c = a++ + b;

То есть a является постинкрементным (a++), поэтому текущее значение a (до постинкремента) берется для + операции с b.

6 голосов
/ 20 сентября 2011

a ++ - это пост с приращением, т. Е. Выражение принимает значение a и , тогда добавляет 1.
c = ++ a + b сделает то, что вы ожидаете.

2 голосов
/ 20 сентября 2011

Это пример плохого стиля программирования.

Это довольно нечитабельно, однако после него увеличивается a, поэтому суммируется текущее значение от a до b, а затем увеличивается a!

1 голос
/ 20 сентября 2011

Согласно правилу Longest Match оно анализируется как a ++ + + b на этапе лексического анализа компилятора.Отсюда и результирующий вывод.

1 голос
/ 20 сентября 2011

a ++ + b ..it дает результат 7, а после выражения значение a обновляется до 3 из-за оператора постинкремента

1 голос
/ 20 сентября 2011

Оператор постинкремента a ++ изменяет значение tge a после вычисления значения a в выражении.Поскольку исходное значение a равно 2, это то, что используется для вычисления c;значение a изменяется, чтобы отразить новое значение после оценки ++.

1 голос
/ 20 сентября 2011

a ++ вычисляется после выражения.

c = ++ a + b;даст вам то, что вы думали.

0 голосов
/ 29 сентября 2018

Здесь c = a +++ b; означает c = (a ++) + b; т.е. пост приращения. В ++ изменения произойдут на следующем шаге, на котором он печатает a, b и c. В ++ a, то есть приращении префикса изменения будут происходить на том же шаге, и это даст результат 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...