c语言和java赋值的区别
a=b+(a=b)*0上面这个式子在java中可以实现两数的交换(不考虑越界,且只考虑整型),但是在c语言中却不行,有高手 能讲一讲为什么吗?详细一点,谢谢。。 --------------------编程问答-------------------- 上面式子打错了
a=b+(b=a)*0 --------------------编程问答-------------------- 没具体测试过这个问题,我猜应该是c与java对于表达式中各个变量的入栈顺序不一样,可能一个是从左至右,一个从右至左。我仅仅是猜的,没有实际测试,你可以实际测试一下。 --------------------编程问答-------------------- 如果在c中a=b+(b=a)*0这样写不行,那你改成a=(b=a)*0+b试试呢,把加好两边对调一下看看。 --------------------编程问答--------------------
不可以。
这两个表达式的值都是一样的,都会变成a的值.. --------------------编程问答-------------------- 两种语言对语法的描述不同 --------------------编程问答-------------------- 好像c确实不行,那应该是c语言对于这个表达式的处理都是先赋值,然后再开始计算表达式。 --------------------编程问答-------------------- 这种硬要用一个表达式来做,没啥意义,其实c一个表达式也是可以做到的啊。
如下面这个表达式就可以
(a=a+b)+(b=a-b)+(a=a-b); --------------------编程问答-------------------- 计算顺序的问题 --------------------编程问答-------------------- a=b+(b=a)*0
我比较怀疑,不同的c编辑器下,是不是同一个结果。
补充:Java , Java SE