using namespace std;
int main(){
double a=3;
double b;
b=a/a++;
cout<<b;
return 0;
}
为什么结果是1.33333
我用的codeblocks,结果是1没错,你用的是什么编辑器
dev c++
不同的编译环境得到的结果不一样,可以看一下谭浩强的C。
这个在c标准里面没有定义,具体的结果跟编译器的实现有关,不要钻牛角尖。
从你的结果看,编译器应该是先做了a++后再去除的。
尽量不要写这种复杂的自增自减,结果不可预测,实在要写,用中间变量过渡一下。
运行时 值发生了变化
具体过程是怎么变化的呢?
@#xuexi: 你看 b = a/a++ 按照正常的逻辑是3/4得到0.75 但是a++此时是没有增加值的 乘除运算先走右 得到3 但是走完 值就+1了 再走左边a 得到4 也就是b=4/3 得到1.3...
@黄子琪: 谢谢你的讲解,让我恍然大悟,乘除运算先走右边再走左边,这些观点有什么书可以参考吗?因为关于要给别人讲解,需要有一定的依据
这玩意就是 UB,即未定义行为,运行结果由编辑器决定。可以到网上去查一查有关这方面的知识。
平时写代码时建议遇到这种运行顺序不确定的地方就多打打括号。
优先级的问题,这里先算了a++