операция инкремента и декремента в c
#include<stdio.h> #include<math.h> int main() { int a=2,b; b=a++ + a-- + ++a + --a; printf("%d %d",a,b); }
выход-2 9 почему?????
#include<stdio.h> #include<math.h> int main() { int a=2,b; b=a++ + a-- + ++a + --a; printf("%d %d",a,b); }
Ах, я ожидал этого от вашего последнего...
Оператор предварительного приращения и операторы + имеют равный приоритет. Это означает, что то, что делается первым, полностью зависит от компилятора. Это называется неопределенным поведением, и подобных утверждений следует избегать любой ценой.
Почему это происходит в вашем компиляторе? Это просто приоритет, в котором компилятор решил применить префиксные операторы + и++/--. Я не работал с вашим уравнением, но оно может либо сначала сложить, либо сначала вычесть.
В последнее время об этом идет оживленная дискуссия здесь[^], прочитайте нить, чтобы увидеть, что сказано, и игнорируйте парня, который этого не понимает :)
int a=2,b;
b=a++ + a-- + ++a + --a;
b=2+3+3+2
ANS является (2,10)
Прочитайте предыдущие решения. Поведение не определено, и два решения, опубликованные шесть лет назад, уже объясняют, почему.
Первый результат (2) довольно очевиден, потому что a
увеличивается в два раза и уменьшается в два раза. Следовательно a
имеет впоследствии то же значение, что и прежде.
Второй результат (9) - это тот, который не так легко увидеть. Значение b
зависит от времени, когда компилятор выбирает выполнение операций постинкремента и пострекремента. Ваш компилятор выбрал их после того, как все выражение было завершено. Следовательно, b вычисляется как:
b = 2 + 2 + 3 + 2; // afterwards the post-increment and post-decrement operators // are performed
b = 2 + 3 + 3 + 2; // == 10