c语言和java赋值的区别

yuck0419 2013-11-03 11:51:53
a=b+(a=b)*0
上面这个式子在java中可以实现两数的交换(不考虑越界,且只考虑整型),但是在c语言中却不行,有高手 能讲一讲为什么吗?详细一点,谢谢。。
...全文
255 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
想喝咖啡的貓 2013-11-04
  • 打赏
  • 举报
回复
a=b+(b=a)*0 我比较怀疑,不同的c编辑器下,是不是同一个结果。
尘缘udbwcso 2013-11-04
  • 打赏
  • 举报
回复
计算顺序的问题
rumlee 2013-11-04
  • 打赏
  • 举报
回复
这种硬要用一个表达式来做,没啥意义,其实c一个表达式也是可以做到的啊。 如下面这个表达式就可以 (a=a+b)+(b=a-b)+(a=a-b);
rumlee 2013-11-04
  • 打赏
  • 举报
回复
好像c确实不行,那应该是c语言对于这个表达式的处理都是先赋值,然后再开始计算表达式。
sunbo624 2013-11-04
  • 打赏
  • 举报
回复
两种语言对语法的描述不同
yuck0419 2013-11-04
  • 打赏
  • 举报
回复
引用 3 楼 rumlee 的回复:
如果在c中a=b+(b=a)*0这样写不行,那你改成a=(b=a)*0+b试试呢,把加好两边对调一下看看。
不可以。 这两个表达式的值都是一样的,都会变成a的值..
rumlee 2013-11-04
  • 打赏
  • 举报
回复
如果在c中a=b+(b=a)*0这样写不行,那你改成a=(b=a)*0+b试试呢,把加好两边对调一下看看。
rumlee 2013-11-04
  • 打赏
  • 举报
回复
没具体测试过这个问题,我猜应该是c与java对于表达式中各个变量的入栈顺序不一样,可能一个是从左至右,一个从右至左。我仅仅是猜的,没有实际测试,你可以实际测试一下。
yuck0419 2013-11-03
  • 打赏
  • 举报
回复
上面式子打错了
a=b+(b=a)*0

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧