【发布时间】:2019-11-06 11:08:40
【问题描述】:
我对后缀/前缀运算符的 precedence 和 associativity 感到困惑。
一方面,当我在阅读 K&R 的书时,它指出:
(*ip)++
在最后一个例子中括号是必需的;没有它们,表达式将增加 ip 而不是它指向的内容,因为像 * 和 ++ 这样的一元运算符从右到左关联。
没有提及后缀/前缀运算符之间的关联性差异。两者一视同仁。该书还指出 * 和 ++ 具有相同的优先级。
另一方面,this page 声明:
1) 前缀 ++ 和 * 的优先级相同。两者的关联性是从右到左。
2) 后缀 ++ 的优先级高于 * 和前缀 ++。后缀++的结合性是从左到右的。
我应该信任哪一个?多年来随着 C 版本的变化,它是否发生了变化?
【问题讨论】:
-
找到(至少)第三个来源?
-
就个人而言,我信任this one。当然,您总是不能信任其中的任何,而只是达到语言标准本身。
-
@ScottHunter 因为 K&R 的书应该是一本圣经,它仍然令人困惑。
-
K&R 书是一个很好的起点,但 ANSI/ISO 标准才是真正的圣经。
-
我,我相信this reference(虽然我有偏见)。