Что касается приоритета операторов приращения - PullRequest
0 голосов
/ 17 октября 2019

Из того, что я знаю

int i = 10;
int j = 5;
j += ++i; //j = 16, i = 11 (first i increments and then adds to j)

И

int i = 10;
int j = 5;
j += i++; //j = 15, i = 11 (first i adds to j and then increments)

В C в двух словах в Таблице 5-4 (приоритет оператора и ассоциативность) этоговорит, что постфиксный оператор ++ имеет приоритет над унарным оператором ++, чего я не понимаю, поскольку противоположность тому, что я написал ранее.

Таблица

Почему это?

1 Ответ

0 голосов
/ 17 октября 2019

Приоритет / ассоциативность оператора только устанавливает порядок, в котором код C должен быть проанализирован . Это не имеет ничего общего с тем, как должен выполняться код 1) .

Это означает, что если у вас есть что-то вроде *p++, это эквивалентно *(p++), потому что postfix ++ имеет приоритет над унарным *. Но когда этот код будет выполнен позже, ячейка памяти *p будет сначала разархивирована, а адрес p увеличен на 1 элемент позже.

Это, в свою очередь, потому что postfix ++ следует правилу, котороеговорит, что «вычисление значения результата секвенируется до побочного эффекта обновления сохраненного значения операнда».


1) Подумайте о математическом уравнении, таком как:a * b + c * d - оператор приоритета в математике и Си вынуждает вас вычислять это как (a * b) + (c * d), но он ничего не говорит вам о том, нужно ли вам вычислять a * b до или после c * d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...