免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 弹头
打印 上一主题 下一主题

[C] a+b=c跟c=a+b为什么不一样? C新新手问题 [复制链接]

论坛徽章:
0
131 [报告]
发表于 2008-05-04 12:02 |只看该作者

一个是数学等式,一个是计算机赋值,不可等同

a+b=c 这个是数学等式,在C里面赋值是将等号右边的值赋给等号左边的变量。

如果你写a+b=c的话~~a和b的值就无法确定了,如果c已知,而a,b都未知,这时候a和b就会有无穷多个值了。你总不能让计算机猜你会给a或b各赋什么值吧~而且这样写的话有很多问题,如果你写a+b=h+i,那么其间的赋值关系就完全混乱了,计算机完全不知道你想要给谁赋值。这个错误主要的问题是赋值方向和运算优先级。如果暂时不考虑优先级问题,那么~我们知道,C里面明确的说法是从右向左赋值的。而且运算结果都是要赋值给一个变量或当成参数传递的,如果按从左到右先算a+b的话,那么c赋值给谁?如果先算b=c的话,那么a+b又赋值给谁??为了消灭这么一系列可能存在的错误,C给了个硬性规定,就是一定要往左赋值,而且等号左边只允许有明确的变量(而不是表达式)来接受赋值。统一向左赋值还有个好处,就是编译器不用自己去判断哪边该接受值,也有助于统一代码可读性。。就像秦国统一六国一样,有了统一的货币和语言,这样就有利于交流、沟通了。。。否则一人一个写法,编译器该如何理解?而且你拿程序给我读的时候还得我边读你边给我翻译。

在C里表达这样一个等式的话应该这样~~a+b==c,他会返回一个布尔值,如果a+b的值等于c,那就返回“真”,不等于则返回“假”。。。

[ 本帖最后由 tydn0 于 2008-5-4 12:04 编辑 ]

论坛徽章:
0
132 [报告]
发表于 2008-05-04 13:13 |只看该作者
因为+优先于=
:wink:

论坛徽章:
0
133 [报告]
发表于 2008-05-04 18:01 |只看该作者
这问题太强悍了~~~
估计再过10年就有这样的语法了~

论坛徽章:
0
134 [报告]
发表于 2008-05-05 09:13 |只看该作者
塑料袋明明说的是对的阿,a+b=c, a是基址,加个位移,如果c也是地址呢,也就是说,就算c是个什么int,谁说int不是地址,也就是说,c完全可以是地址,a定义成什么c就定义成什么,是不是都没有调试过阿,塑料袋也太容易人数了吧!

论坛徽章:
0
135 [报告]
发表于 2008-05-05 09:48 |只看该作者
c=a 的意思是把 a 的值取出来,存入 c,
a=c 的意思是把 c 的值取出来,存入 a,
它们俩的含义显然是不同的。
反应到你的例子中,
c=a+b 就是把 a 和 b 的值取出来,进行加法运算,然后把结果存入 c,但是 a+b=c 是什么意思呢?难道是把 c 的值取出来存入 a+b 吗?

论坛徽章:
0
136 [报告]
发表于 2008-05-05 09:54 |只看该作者
是说我吗,对阿,放入a+b,不浪费口舌了,我调了一下,*(a+b)可以调通,a+b调不通,编译器这么设计,管它呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP