В C языке программирования: какой порядок 3 (номер 3) будет назначен переменным? Как и в какой переменной получить 3 первых, вторых и третьих? - PullRequest
0 голосов
/ 25 марта 2020

Associativity of Operators Продолжение вопроса: В C Язык программирования: Для приведенного ниже вопроса: Какой порядок будет присваиваться переменным 3 (номер 3)? Как и в какой переменной получить 3 первых, вторых и третьих? И какая переменная будет иметь 3 в конце?

Вопрос: A = B = C = 3

Дальнейшее объяснение того, что я Я спрашиваю / Мои попытки понять эту концепцию:

Согласно приложенному изображению с указанием ассоциативности операторов, операторы присваивания должны быть слева направо, нет?

Итак, 3 следует присвоить A, затем B, а затем C?

В соответствии с практическим решением вопроса, наоборот, 3 присваивается C, затем B , тогда А, так я очень запутался, почему это справа налево? Когда Ассоциативность Операторов говорит, что это слева направо!

1 Ответ

4 голосов
/ 25 марта 2020

Выражение A = B = C = 3 анализируется в C как A = (B = (C = 3)). Оператор присваивания связывается справа налево.

Однако фактическое присваивание указывается в качестве побочного эффекта выражения, и порядок, в котором возникают эти побочные эффекты, не определяется стандартом C.

Изображение в вопросе неверно, чтобы показать порядок операторов присваивания слева направо, а источник изображения следует рассматривать с подозрением. Ассоциация операторов присваивания возникает из правил грамматики в стандарте C, где 6.5.16 показывает одно правило как:

выражение присваивания : унарный -выражение оператор присваивания выражение присваивания

Тот факт, что правый операнд является выражением присваивания, означает, что в X = Y, Y может быть другим выражением присваивания, например Z = 4, но X не может быть. Поэтому A = B = C = 3 должен быть проанализирован как C = 3, являющийся выражением присваивания внутри B = …, а B = C = 3 должен быть выражением присваивания внутри A = …. Сравните это с правилом для одного из аддитивных операторов в C 6.5.6:

добавочное выражение : добавочное выражение - мультипликативное выражение

В этом правиле аддитивное выражение слева, поэтому A - B - C обязательно группируется как (A - B) - C.

...