Разница между i++ и (i) ++ в C
int i = 3;
int j = (i)++;
против
int i = 3;
int j = i ++;
Есть ли разница между тем, как оцениваются два вышеупомянутых случая?
Первый случай эквивалентен увеличению значения r или это неопределенное поведение?
Ответы
Ответ 1
i++
и (i)++
ведут себя одинаково. C 2018 6.5.1 5 говорит:
Заключенное в скобки выражение является основным выражением. Его тип и значение идентичны типам выражения без скобок. Это lvalue, обозначение функции или выражение void, если не заключенное в скобки выражение является, соответственно, lvalue, указателем функции или выражением void.
Формулировка такая же в C 1999.
Ответ 2
В вашем простом примере i++
сравнению с (i)++
нет никакой разницы, как отмечено в ответе Эрика Постпишила.
Однако это различие действительно имеет смысл, если вы разыменовываете переменную-указатель с помощью оператора *
и используете оператор приращения; есть разница между *p++
и (*p)++
.
Предыдущий оператор разыменовывает указатель, а затем увеличивает сам указатель; последний оператор разыменовывает указатель, а затем увеличивает разыменованное значение.