When I read the TCPL by K&R, I just couldn\'t understand two expressions:
*p++ = val; /*push val onto stack */
Here is my idea:
<
Precedence of operators is an order of their interpretation by compiler, not the order of their execution.
Operator precedence actually means "where to put parentheses". Hence you are correct that *p++ is the same as *(p++).
But now we need to understand what is *(p++). It means taking *p and then increasing p++, because of post-fixed operation.
So, in short, you just mixed order of interpretation by compiler (which is determined by parentheses or precedence) and order of execution (which is determined by post- or pre-fixed definition).