My C немного слаб, поэтому, если я здесь не в базе, кто-то мне дал знать.
Предполагая, что вы говорите о выражении *((a) ? &b : &a)
(и что вы знаете, как тройной оператор работает вообще), вот как она ломается:
Состояние (a)
оценивается: при использовании в булево в int
, 0
оценивает значение false, а положительные (или ненулевые?) Значения оцениваются как истинные - в этом случае a == 0
является ложным.
Тернар затем возвращает значение &b
, если true и &a
, если false (в этом случае оно ложно, поэтому оно возвращает &a
).
Возвращаемое значение является ссылкой на переменную; звездочка перед окружающими круглыми скобками разыгрывает эту ссылку, поэтому выражение *((a) ? &b : &a)
оценивает переменную - но не значение - a
(если a
, где не 0
, выражение будет оцениваться до b
).
Эта строка затем присваивает этой переменной (в данном случае a
) значение второго тернарного выражения, которое, как я полагаю, можно вычислить.
Конечным результатом является то, что он присваивает значение c
переменной a
, что объясняет результат.
Какой? ....... – WhozCraig
Какая часть неясна? 'a'' '0, поэтому должно быть очевидно, какая опция выбрана в обоих случаях. – JJJ
Сообщите нам, что вы думаете, что результат должен быть вместе с вашими рассуждениями, и мы скажем вам, правильны вы или нет. –