有人可以解释一下为什么以下代码的结果是9?我真的很困惑..
#include <stdio.h>
int main (void)
{
int a = 3, rez;
rez = a-- + (-3) * (-2);
return 0;
}
答案 0 :(得分:5)
表达式
rez = a-- + (-3) * (-2)
解析为
res = ((a--) + ((-3) * (-2)))
并评估为&#34; a--
的结果已添加到(-3) * (-2)
的结果中,最终结果已分配给res
&#34;
Postfix --
的优先级高于一元-
,后者的优先级高于二进制*
,后者的优先级高于二进制+
,后者的优先级高于=
。 {1}}。
请注意,优先级和评估顺序不是一回事 - 它不能保证在a--
之前评估(-3) * (-2)
在-3
之前评估-2
;所有这一切都得到保证,(-3) * (-2)
的结果在被添加到a--
的结果之前就已知。
此外,a--
的副作用不必在评估后立即应用。这意味着以下是完全有效的操作顺序:
t1 = a
t2 = -2
t2 = t2 * -3
res = t1 + t2
a = a - 1