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:
dereference and postfix has the same precedence, and associativity is right to left,so
*p++ = val
maybe the same with *(p++) = val
, because the pointer usually is the next position to the top , so in this code, p increase 1 first because of the parenthesis, so the p is the two units above the current top ,but not the one unit above the current top ,where the val should be!!! Thx
The prefix increment/decrement and dereference operators are equal precedence, but the postfix operator is higher, so *p++
is the same as *(p++)
, which is like writing *p = val; p++;
If you wrote (*p)++ = val
, it wouldn't compile, as you'd be trying to assign a value to a number.
Precedence and Associativity of Operators in K&R, table 2-1, pg 53, isn't as granular and complete as more recent table in Stroustrup, tC++PL,Sed, sec 6.2 Operator summary, p120-121.
C++ operator precedence Agnew's answer is excellent.
he points out association is indeed R->L for unary operators and that for *(p++),
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With