Приоритет / ассоциативность оператора только устанавливает порядок, в котором код C должен быть проанализирован . Это не имеет ничего общего с тем, как должен выполняться код 1) .
Это означает, что если у вас есть что-то вроде *p++
, это эквивалентно *(p++)
, потому что postfix ++ имеет приоритет над унарным *
. Но когда этот код будет выполнен позже, ячейка памяти *p
будет сначала разархивирована, а адрес p
увеличен на 1 элемент позже.
Это, в свою очередь, потому что postfix ++ следует правилу, котороеговорит, что «вычисление значения результата секвенируется до побочного эффекта обновления сохраненного значения операнда».
1) Подумайте о математическом уравнении, таком как:a * b + c * d
- оператор приоритета в математике и Си вынуждает вас вычислять это как (a * b) + (c * d)
, но он ничего не говорит вам о том, нужно ли вам вычислять a * b
до или после c * d
.