【发布时间】:2015-02-09 05:08:30
【问题描述】:
经过href=http://en.cppreference.com/w/c/language/operator_precedence这个链接后,大家好,
我以为我理解了运算符的优先级,但我遇到了以下疑问。
该链接说 在解析表达式时,列在某行上的运算符将比其下一行中列出的任何运算符更紧密地绑定到其参数(就像用括号一样)。例如,表达式 *p++ 被解析为 *(p++),而不是 (*p)++。
那么表达式 ++*p 是如何被评估的,它就像 ++(*p) 但如果是 ++ 具有更高的优先级或绑定然后 *,那么为什么在上述情况下 * 绑定得更紧密,以及表达式呢*++p ?
【问题讨论】:
-
对于
++*p,您将如何以其他方式放置括号?++必须适用于*p而不是p,因为它物理上位于*p的左侧,而不是p。当您编写1 + 2*3时,您不会期望 1 和 2 相乘,即使*的绑定比+更紧密。 -
回答你的第二个问题,
*++p等同于*(++p)。在这里,也没有需要诉诸运算符优先级来解决的歧义。 -
*++p必须被解释为*(++p),因为(*++)p没有意义——*的操作数必须是一个值,而不是一个运算符。
标签: c++ c pointers operator-precedence