啊哈磊_编程从这里起步

标题: --i和i--编译与理论不同 [打印本页]

作者: 桥桥桥    时间: 2019-1-3 19:59
标题: --i和i--编译与理论不同
int a=2;
printf("%d %d",++a,--a);
编译出的结果是 2 2
但是自己算的应该是 2 1
求解答

作者: F-Hawk    时间: 2019-1-5 13:50
a++是先执行表达式后再自增,执行表达式时使用的是a的原值。
++a是先自增再执行表达示,执行表达式时使用的是自增后的a。

就是说++a的语句会在使用a的值(也就是2)之前使a加一(此时a为3)
然后--a语句又使得在使用a之前(也就是3)变成2,
但是由于你的--a和++a是写在一起的,是同时执行的,所以在输出a之前
a进行了2次变换,分别是加一和减一,所以最后真正使用a输出的时候输出的就是2 2


作者: Forinser    时间: 2019-1-21 08:36
printf函数会先把引号后面的表达式算出来
你先把a+1然后就把a-1最后才输出,你说是不是2呢
作者: 元元二郎    时间: 2019-2-23 18:28
printf函数会先把引号后面的表达式算出来
你先把a+1然后就把a-1最后才输出,你说是不是2呢




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2