运算符优先级混乱

时间:2015-02-09 05:08:31

标签: c++ c pointers operator-precedence

你好,经过href = http://en.cppreference.com/w/c/language/operator_precedence这个链接, 我以为我理解了运营商的优先权,但我对此产生了怀疑。 该链接表示解析表达式时,某些行上列出的运算符将比其下面的行上列出的任何运算符更严格地(如同括号)绑定到其参数。例如,表达式* p ++被解析为*(p ++),而不是(* p)++。
那么表达式++ * p如何被评估就像++(* p)一样,但是如果是,那么++具有更高的优先级或者绑定然后*,那么为什么*在上面的情况下更严格地绑定,那么表达式怎么样* ++ p?

2 个答案:

答案 0 :(得分:3)

运算符优先级定义当有多个选项时,应首先应用哪个运算符

从您的链接:

  

优先级和关联性独立于order of evaluation

表单的++*p任何表达式:

{operator 2} {operator 1} {expression}

有一个明确定义的order of evaluation,其中{operator 1} {expression} 必须才能应用{operator 2}作用的表达式。

答案 1 :(得分:1)

++优先于*,两者的关联性从右到左。

所以

++*p将被评估为++(*p),因为++需要应用于可修改的值。

尽管

*++p如您所看到的那样,接近p的运算符为++*的优先级高于++p,因此*(++p)会发生{{1}}首先是解除引用{{1}}