繁体   English   中英

运算符优先级混淆

[英]Operator precedence Confusion

大家好,在通过href = http://en.cppreference.com/w/c/language/operator_precedence此链接之后,我以为我理解了运算符的优先级,但随后引起了疑问。 该链接表示, 在解析表达式时,在某行上列出的某个运算符将比在其下一行上列出的任何运算符更严格地(如用括号括起来)绑定到其参数。 例如,表达式* p ++被解析为*(p ++),而不是(* p)++。
那么如何对表达式++ * p进行求值,就像++(* p)一样,但是如果是,++的优先级或绑定度更高,那么*,那么为什么在上述情况下*绑定得更紧,表达式又如何* ++ p?

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

从您的链接:

优先权和关联性与评估顺序无关。

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

{operator 2} {operator 1} {expression}

具有明确定义的求值顺序 ,其中必须应用{operator 1} {expression}才能使{operator 2}可以执行的表达式。

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

所以

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM