为了账号安全,请及时绑定邮箱和手机立即绑定

小白求解各种运算的先后顺序

比如; int a = 3; b = 4;计算a+b%a-b/a+a*b-a++该算式的运算结果以及运算后a的值

正在回答

3 回答

前面你说的“但假如是认为a++是先取值而后运算,而a本身并未受到这个运算的影响的话”——你可以这么理解,但你后半句“可以得出“c语言入门”3-4的答案是12”——正相反,恰恰无法得出这个结论。

a++表达式的值就是a当时的值,在当时a的值可以说是不受这个运算的影响的。但a的值最终还是要自增的,只不过这个自增是什么时候发生的是不确定的,那么整个表达式中前面那几个a的值该取多少呢?不确定! 你无法确定前面那几个a是不是已经自增过了,这是因为C标准没有规定操作数的求值顺序。表达式是有优先级的,但是优先运算的表达式的操作数不一定是优先求值,反之亦然。加之a自增的时点本来就不确定,所以无法确定这些a到底该是什么值,那整个表达式的值也就是不确定的了。

如我在那个帖子中最后的那个建议所说:如果有表达式改变了一个操作数的值,那就不要在这个复合表达式中再次使用这个操作数。除非你能确定“改变值”和“使用值”的先后顺序。

0 回复 有任何疑惑可以回复我~
#1

拥抱蓝天 提问者

非常感谢!
2015-08-26 回复 有任何疑惑可以回复我~

首先说:这题目出错了!

这道题与运算符优先级无关,这个表达式的值是不确定的。

根据优先级,最后的a++先算,a++的值为4,但是a本身的值是什么时候自增的?这是不确定的。所以式子中前面那些a的值也是不确定的。


对上面的解答有疑惑,请看这里 http://www.imooc.com/qadetail/64864 我的回答,我懒得复制过来了...

0 回复 有任何疑惑可以回复我~
#1

拥抱蓝天 提问者

谢谢,,初学者不是太明白。但假如是认为a++是先取值而后运算,而a本身并未受到这个运算的影响的话,可以得出“c语言入门”3-4的答案是12。不知如此,可有不妥?
2015-08-25 回复 有任何疑惑可以回复我~
#2

onemoo 回复 拥抱蓝天 提问者

不正确。 请看我上面提到的那个帖子中的回答。
2015-08-25 回复 有任何疑惑可以回复我~
#3

拥抱蓝天 提问者 回复 onemoo

嗯哼。。不太懂
2015-08-26 回复 有任何疑惑可以回复我~
#4

拥抱蓝天 提问者 回复 onemoo

意思是a 到底是a++后的a ?还是a++之前的a? 这个是不确定的,所以这条式子是有问题的???
2015-08-26 回复 有任何疑惑可以回复我~
#5

onemoo 回复 拥抱蓝天 提问者

差不多是这个意思
2015-08-26 回复 有任何疑惑可以回复我~
查看2条回复

从左到右,先乘除取模,后加减  这一题结果是12  a运算后为4(运算时为3)

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926206    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

小白求解各种运算的先后顺序

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信