如果int x=5;
我想表达 y=++x * ++x;
评估为:
首先执行++x
导致x=6
然后又++x
导致x=7
然后表达式计算 y=x*x
使 y=49
的值
使用相同的推理以下代码行
int z=5, x=5,y=0,p=0;
y=++x * ++x + ++x;
p= ++z + ++z * ++z;
应该评估 y
的相同值和p
但编译器产生不同的答案。我可能在优先顺序中缺少一些东西。
最佳答案
您的两个表达式都通过尝试在没有中间序列点的情况下多次修改值来导致未定义的行为。您的问题没有通用答案。
关于c - 一元++优先顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450873/