我认为描述问题的最好方法是实际显示此简单代码的输出: Image contains code and output
#include<stdio.h>
int main()
{
int a=5,b;
b=a-++a;
printf("%d %d",a,b);
return 0;
}
如您所见,返回的值在逻辑上是正确的。 ++ a将a的值增加到6。然后b = 6-6 = 0。
但是,当我使用scanf将'a'的值作为用户输入时,会发生以下情况: Image contains code and output
#include<stdio.h>
int main()
{
int a,b;
scanf("%d",&a);
b=a-++a;
printf("%d %d",a,b);
return 0;
}
结果不应该相同还是我在这里遗漏了一些简单的东西吗?
答案 0 :(得分:0)
a - ++a
格式的值不确定,因为参数'-'的执行顺序是不确定的。
在第一种情况下,编译器知道 a 的值,因此可以优化代码,最后在编译时就知道了所有内容,而在第二种情况下则不是。
在编译时或执行时计算的值不同的事实是a - ++a
格式的结果,其结果未定义。