运算符优先级混乱

Operator precedence Confusion

大家好,看完 href=http://en.cppreference.com/w/c/language/operator_precedence 这个 link , 我以为我了解运算符的优先级,但我开始怀疑。 link 表示 在解析表达式时,列在某行的运算符将比列在下面一行的任何运算符更紧密地(就像通过括号一样)与其参数绑定它。例如,表达式 *p++ 被解析为 *(p++),而不是 (*p)++。
那么表达式 ++*p 是如何被评估的,它是否像 ++(*p) 但如果是的话 ++ 具有更高的优先级或绑定然后 *,那么为什么 * 在上述情况下绑定得更紧,表达式呢*++p ?

++* 具有更高的优先级并且两者的关联性是从右到左。

所以

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

*++p 如您所见,在评估时接近 p 的运算符是 ++ 并且比 * 具有更高的优先级,因此 ++p将首先发生,然后取消引用 *(++p)

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

来自你的link:

Precedence and associativity are independent from order of evaluation.

表达式++*p,或任何形式的表达式:

{operator 2} {operator 1} {expression}

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