谁能解释一下为什么下面代码的结果是 9?我真的很困惑..
#include <stdio.h>
int main (void)
{
int a = 3, rez;
rez = a-- + (-3) * (-2);
return 0;
}
最佳答案
表达式
rez = a-- + (-3) * (-2)
被解析为
res = ((a--) + ((-3) * (-2)))
并且被评估为“a--
的结果被添加到(-3) * (-2)
的结果中, 最终结果赋值给res
”。
后缀 --
的优先级高于一元 -
,后者的优先级高于二进制 *
,后者的优先级高于二进制 >+
,其优先级高于=
。
请注意,优先级 和求值顺序 不是一回事 - 不能保证 a--
在 之前求值(-3) * (-2)
,或者说 -3
在 -2
之前求值;所保证的是 (-3) * (-2)
的结果 在添加到 结果 之前是已知的 a--
。
此外,a--
的副作用 不必在计算后立即应用。这意味着以下是完全有效的操作顺序:
t1 = a
t2 = -2
t2 = t2 * -3
res = t1 + t2
a = a - 1
关于C 操作顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41704741/