Помните, что операторы увеличения и уменьшения возвращают разные вещи в зависимости от того, помещены ли они до или после имени переменной.
В частности, когда оценивается x--
, оно уменьшается x
на 1, но возвращает неизмененное значение x
, которое в данном случае равно 1. В C 1 оценивается как истина, поэтому троичный оператор вернет z++
.
И снова, поскольку оператор ++ помещается после переменной, возвращаемое значение z++
является неизмененным значением z
, что равно 3.
Таким образом, это сводится к y += 3
, в результате чего y
составляет 5.