免费注册 查看新帖 |

Chinaunix

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

抽人欢乐多 [复制链接]

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
11 [报告]
发表于 2012-05-28 22:37 |只看该作者
真热闹真热闹真热闹真热闹

论坛徽章:
0
12 [报告]
发表于 2012-05-28 22:41 |只看该作者
本帖最后由 wwwsq 于 2012-05-28 22:42 编辑
KBTiller 发表于 2012-05-28 22:36
回复 9# wwwsq
“解说所描述的是 a=b,a>0 这个表达式而不是(a=b)>0这个表达式”



(a=b)的值有没有可能不等于a呢?

表达式的值不是空中楼阁,最终还是要去某个寄存器或者内存取值的。

你们都对老谭的解说不满,那么请你对“if((a=b)>0)”进行一下比老谭更正确的解说。

论坛徽章:
0
13 [报告]
发表于 2012-05-28 22:41 |只看该作者
回复 4# wwwsq


从赋值操作符的语义来说,返回的就是对a的引用

  1. #include <stdio.h>

  2. int main(int argc, char **argv)
  3. {
  4.     int a = 3;
  5.     int b = 2;

  6.     (a=b)=1;
  7.     printf("%d:%d\n", a, b);

  8.     return 0;
  9. }
复制代码
这个代码c99你能编译过?

论坛徽章:
0
14 [报告]
发表于 2012-05-28 22:44 |只看该作者
walleeee 发表于 2012-05-28 22:41
回复 4# wwwsq


邪门了,=返回的难道不是右值么?怎么能被赋值?
c++中这个是左值,可以正常执行。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
15 [报告]
发表于 2012-05-28 22:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
16 [报告]
发表于 2012-05-28 22:45 |只看该作者
walleeee 发表于 2012-05-28 22:41
回复 4# wwwsq



你要钻牛角尖那没办法,你做一下strcmp("a=b>0", "a=b;a>0"),这两个字符串的比较,那还肯定不一样呢。

我所说的基本上等价,指的是在那个特定场景下。

我们回归重点,老谭的描述错在哪里?你们更准确的解说是什么样的?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
17 [报告]
发表于 2012-05-28 22:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
18 [报告]
发表于 2012-05-28 22:53 |只看该作者
回复 16# wwwsq


哈哈,真有意思,你居然说我专牛角尖。无语,你说是引用然后,虽然我知道对c99而言,这个说法有问题,但是我潜意识的试了一下,果然出问题了,你就说我转牛角了。。。唉。。。说你什么好。

我所说的基本上等价,指的是在那个特定场景下。

那你不是在放屁么?你一会信心百倍的说谭书正确,一会又来给我加什么特殊情况,居然还说我转牛角。我真是无话可说。

先进行赋值运算(将b的值赋给a),然后判断a是否大于0
改成
先进行赋值运算(将b的值赋给a),然后判断a的临时值是否大于0

我这里只是司马当活马搞,将错就错。问题是if((a=b)>0)这种写法本来就比较心理扭曲,你叫我怎么说?你觉得我会这样写?既然我不会这样写,我何必要跟你解释为什么要这样写?这不是体现我在专牛角?所以,你还是先看看你自己,然后再说我是不是转牛角。最后,这是书籍,不是其他,更不是口香糖,嚼一次就没用了。你明白么?

----------我把300楼那个帖子引过来,你看看。----------
看了10来楼,不看了,真是笑尿了,怎么这么多人那么无知。算了,本来不想说,这里还是说一下。

我一贯认为谭书作为一个入门书,还算过得去,尽管错误比较多,但是毕竟是中国人写的,语言上不是什么大问题,再者,这书还算是方方面面基本都涉及到,所以还是可以看。但是,现在作为入门书的也很多了,所以不选谭书,用其他也行,比如上次某朋友提到的《C程序设计》(非谭书的另外一本)。
注意,我说可以做入门书并非其多么好,多么正确,甚至这算是一种不得已的选择。

现在某些人,不管是什么目的了,半块钱也好,还是无知也好,或者脑子乱不知所云也好,都无所谓了,这些人就跟挡中央下的屁民一样,一边不满意体制,一边又在维护体制,问他们为什么要维护这个体制,它们总是有一推让人哭笑不得的理由。比如,这个体制推到了是不是会更差啊,这个体制虽然很烂不过还是不错的,这个体制尽管很烂不过我是受益者,这个体制好不好没关系反正没伤害到我,这个体制好不好没关系反正能活就好。。。。如此等等。。。

这些人,脑子乱,说难听点,一个字,。不服?请继续吧,关我什么事,我没请你看帖子。

另外,pm也不要东拉西扯,比如前面那个讨论二维数组是不是连续那个问题,我觉得就偏离了大方向,甚至偏得比较远。在做好的前提下尽快把书拿出来,这样一来可以让那些傻x服气,二来也可以证明你自己到底是不是在吹毛球痴。
这样于人于己都是好事,规避这些无谓的争执。

还有,那些脑子乱或者干脆就是半块钱的二货,请先清楚自己到底在干什么,然后再来评断,不要因为个人情绪或者某些告不得人的原因而出来犯二。如果是谭浩强的半块钱,还不如叫谭浩强把书写好点,都1,2,3,4版了,还那么多低级毛病,你觉得合理么?

最后,评论前请先懂得如下2个问题:
书籍,论文,会议报告,网文/博客,帖子,5者之间的区别和要求
文学小说,其他小说,科技书籍,3者之间的区别和要求

论坛徽章:
0
19 [报告]
发表于 2012-05-28 22:59 |只看该作者
本帖最后由 wwwsq 于 2012-05-28 23:00 编辑
pmerofc 发表于 2012-05-28 22:45
(a=b)的值等于a

(a=b)就是a



左值右值只是编译层面的概念,(a=b)>0在执行层面,就是把b赋值给a,然后用a的值去做比较。



http://msdn.microsoft.com/en-us/library/b0zx90af.aspx

The assignment operators return the value of the object specified by the left operand after the assignment. The resultant type is the type of the left operand. The result of an assignment expression is always an l-value. These operators have right-to-left associativity. The left operand must be a modifiable l-value.
NoteNote

In ANSI C, the result of an assignment expression is not an l-value. Therefore, the legal C++ expression (a += b) += c is illegal in C.

你看,在c++里面,左值右值就不是那么回事了。这只是编译器的处理。

如果你觉得微软的资料还不够权威,请给出你的资料来源。




论坛徽章:
0
20 [报告]
发表于 2012-05-28 23:02 |只看该作者
walleeee 发表于 2012-05-28 22:53
回复 16# wwwsq



不知所云。我引用了资料说明赋值操作,你们觉得wikipedia不够好懂,我又去找了微软的资料,还把重点标成了橙色。你们净是空口说,能给点资料出处吗?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP