有人可以解释一下为什么以下代码的结果是9?我真的很困惑..
#include <stdio.h>
int main (void)
{
int a = 3, rez;
rez = a-- + (-3) * (-2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
表达方式
rez = a-- + (-3) * (-2)
Run Code Online (Sandbox Code Playgroud)
被解析为
res = ((a--) + ((-3) * (-2)))
Run Code Online (Sandbox Code Playgroud)
并被评估为"将结果a--添加到结果中(-3) * (-2),并将最终结果分配给res".
Postfix的--优先级高于一元-,后者的优先级高于二进制*,后者的优先级高于二进制+,后者的优先级高于二进制=.
请注意,评估的优先顺序和顺序并不相同 - 它不能保证a--在之前评估(-3) * (-2),或者-3之前评估-2; 所有有保证的是,结果的(-3) * (-2),才可以被添加到已知结果的a--.
Futhermore的副作用的a--没有评估后立刻应用.这意味着以下是完全有效的操作顺序:
t1 = a
t2 = -2
t2 = t2 * -3
res = t1 + t2
a = a - 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |