这是:
*(1 + &foo)
Run Code Online (Sandbox Code Playgroud)
这个一样吗?
*(&foo + 1)
Run Code Online (Sandbox Code Playgroud)
'+'和'&'具有相同的优先级,它们从右到左进行评估.但是你无法解释第二种情况:
*(&(foo + 1))
Run Code Online (Sandbox Code Playgroud)
...因为你只能使用带有l值的'&'(如果你这样写它就不会编译).它会是垃圾吗?或者它会安全地弄清楚你的意思吗?
是的,它们是等价的(第三个显然不是).
在一元 &操作符比优先级高的二进制 +运算符(就像所有的一元运算符做),这样&foo + 1分析的(&foo) + 1.当你说它们具有相同的优先权时你想到的是一元运算 +符(它是一个不同的运算符)具有与一元相同的优先级&.