Consider:
a = 10;
int *ptr = &a;
printf("%d %d\n", a, ++*ptr);
The output is - 11 11
How is it evaluated?
This is undefined behaviour, so the result could be anything. There isn't any sequence point in the line, which means that both operations are unsequenced; either argument could be evaluated first, or both simultaneously (see Sequence point and John Bollinger's comment).
For example, when evaluating with the clang compiler, this is the output:
<source>:5:26: warning: unsequenced modification and access to 'a' [-Wunsequenced]
printf("%d %d\n", a, ++a);
~ ^
1 warning generated.
Execution build compiler returned: 0
Program returned: 0
2 3
See this answer for more: Order of operations for pre-increment and post-increment in a function argument?