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