Разница между i ++ и (i) ++ в C - PullRequest
0 голосов
/ 27 февраля 2019
int i = 3;
int j = (i)++;

против

int i = 3;
int j = i ++;

Есть ли разница между тем, как оцениваются два вышеупомянутых случая?

Эквивалентен ли первый случай увеличению значения или это неопределенное поведение?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

В вашем простом примере i++ против (i)++ нет никакой разницы, как отмечено в ответе Эрика Постпишила.

Однако это различие действительно имеет смысл, если вы разыменовываете переменную-указатель с помощью* оператор и использование оператора приращения;есть разница между *p++ и (*p)++.

Предыдущий оператор разыменовывает указатель, а затем увеличивает сам указатель;последний оператор разыменовывает указатель, а затем увеличивает разыменованное значение.

0 голосов
/ 27 февраля 2019

i++ и (i)++ ведут себя одинаково.C 2018 6.5.1 5 говорит:

Выражение в скобках является основным выражением.Его тип и значение идентичны типам выражения без скобок.Это lvalue, обозначение функции или выражение void, если выражение без скобок является, соответственно, lvalue, указателем функции или выражением void.

Формулировка такая же, как в C 1999.

...