From cppreference:
Between the previous and next sequence point a scalar object must have its stored value modified at most once by the evaluation of an expression, otherwise the behavior is undefined.
Code example:
int a = store_and_return_value(&a);
For both C and C++.