Precedence of dereference and postfix

前端 未结 3 1483
南旧
南旧 2020-12-18 07:33

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:

<
相关标签:
3条回答
  • 2020-12-18 07:50

    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.

    0 讨论(0)
  • 2020-12-18 07:51

    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.
    0 讨论(0)
  • 2020-12-18 07:54

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

    0 讨论(0)
提交回复
热议问题