Да, это Неопределенное поведение , потому что вы пытаетесь нарушить второе правило ..
Стандарт гласит, что
1) Между предыдущей и следующей точкой последовательности объект должен иметь свое сохраненное значение, измененное не более одного раза при оценке выражения.
2) Кроме того, предварительное значение должно быть доступно только для определения значения, которое будет сохранено .
Примечание : порядок вычисления операндов оператора *
равен неопределен , а *p
- не что иное, как i
.