Precedence of dereference and postfix

蓝咒 提交于 2019-11-29 07:38:52

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.

kwestphal

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++),

  1. first p++ evaluates, but the previous p value is returned
  2. then *p is evaluated with this previous p value and the assignment occurs
  3. then the statement ends and p++ post increment value is now active, ie pointer p is now bumped.

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).

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!