注册 登录
编程论坛 C语言论坛

史上最难

MOON奏鸣曲 发布于 2018-03-18 23:10, 2103 次点击
#include<stdio.h>
int main(void){
    int a=2,b=2,s;
    printf("%d\n",s=(++a)+(++a));
    printf("%d\n",s=(++b)+(++b));
    return 0;
}
结果为什么不是3+3=6
10 回复
#2
MOON奏鸣曲2018-03-18 23:19
莫欺少年穷
#3
吹水佬2018-03-18 23:44
#include<stdio.h>
int main(void){
    int a=2,b=2,s;
    int *pa=&a;
    printf("%d\n",s=(++a)+(++a));
    int *pb=&b;
    printf("%d\n",s=(++b)+(++b));
    return 0;
}

[此贴子已经被作者于2018-3-18 23:45编辑过]

#4
lanke7112018-03-19 00:18
回复 楼主 MOON奏鸣曲
又看到了这种"未定义行为"的写法。
结果看编译器。
请参考这篇解释。http://



#5
MOON奏鸣曲2018-03-19 01:15
回复 4楼 lanke711
感谢回答!
#6
MOON奏鸣曲2018-03-20 12:20
还有人来发表下意见么
#7
吹水佬2018-03-20 13:39
以下是引用MOON奏鸣曲在2018-3-20 12:20:52的发言:

还有人来发表下意见么

LZ的代码运行结果是什么
3楼的代码运行结果是什么
#8
renkejun19422018-03-20 13:56
由于加法满足交换律,所以得到的输出应该是7。

这是未定义的,所以要得到你想要的输出,只有在满足交换律的情况下。
#9
MOON奏鸣曲2018-03-20 20:39
回复 7楼 吹水佬
楼主的结果是8
三楼的结果是6
#10
MOON奏鸣曲2018-03-20 20:39
回复 8楼 renkejun1942
感谢回复!
#11
吹水佬2018-03-20 23:11
以下是引用MOON奏鸣曲在2018-3-20 20:39:10的发言:

楼主的结果是8
三楼的结果是6

你还好,起码有想要的6。
我的结果是:
    楼主的结果是8
    三楼的结果是7
为什么会这样?加了句 int *pa=&a; 这对a本身没影响吧。
用同一编译平台,为何也会有不同的结果,这可能不只是编译器的事,问题可大了。
1