Давайте посмотрим на эту строку:
*((a+1 == 1) ? &b : &a) = a ? b : c;
(a+1 == 1)
равно 1
, так что это становится
*(1 ? &b : &a) = a ? b : c;
То есть
*(&b) = a ? b : c;
Так как a
по-прежнему 0
, то есть
*(&b) = c;
Это означает, что адрес b
взят, а значение, на которое он указывает (b
), установлено на c
,что 2
.Итак, в конце концов, то, что он делает, меняется b
на 2
.
Если троичный оператор (?
) смущает вас, вы можете прочитать об этом здесь .