$void main()
{
int a=10,c;
c= ++a + ++a;
printf("%d",c);
}
此程序Actualy打印值 c = 24 但是通过计算,我们可以说它应该是 c = 23 ,怎么可能?
答案 0 :(得分:1)
您的程序有一个错误 - 您修改相同的变量两次而没有插入序列点。修复错误,神秘感将会消失。
非常深刻地理解语言是如何工作的,但编译器如何工作则需要理解为什么错误的代码碰巧做它碰巧做的事情。我只是建议不要编写错误的代码,当你发现错误时,只需修复它,而不是试图准确理解它为什么以及它如何破坏。
我对你的建议是停止。您学到了正确的教训 - 触发未定义行为的代码是不可预测的,并且经常无法执行您可能期望的操作。在您成为正确使用该语言的专家之前,您需要了解UB。
答案 1 :(得分:0)
'++' > '+'
这里的帖子增量操作在之前完成。如果你给它两次,如果post增加了两次,那么' a'变为12
并将其加(12+12)
。因此最终值为24
。