运算符优先级混乱
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}
可以作用的表达式.
大家好,看完 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}
可以作用的表达式.