« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9692121 建立时间:2004年12月20日 |

| |
[c++]一道非常有趣的c面试题  原创空间, 文章收藏, 软件技术, 电脑与网络
邢红瑞 发表于 2008/10/23 15:30:14 |
我遇到一道面试题main(){ hello(3,4); int a=1,b=2,c=2; while(a<b<c) { int t; t=a; a=b; b=t; c--; } printf("%d \n",c); return 0;}求c的值,我想了一下,写出2,我认为不进循环。问了一下其他的人,结果都认为不进循环,因为先比较b<c,那样是2不小于2,所有结果为0,a不小于0,所以不进循环。后来小方同学说大家的想法是错的,这和a=b=c不同,不是先比较b<c,而是(a<b)<c,结果c为0。试了一下,vc 8,vc6 ,lcc 结果都是0,有必要看一下c编译器的实现了。看了一下c99的规范,严格的说,还没有一款编译器完全实现了C99标准。
§6.5.9 第86页 89) The expression a<b<c is not interpreted as in ordinary mathematics. As the syntax indicates, itmeans (a<b)<c; in other words, ‘‘if a is less than b, compare 1 to c; otherwise, compare 0 to c’’.
c程序员面试前,必须熟读c99规范。 |
|
回复:一道非常有趣的c面试题 原创空间, 文章收藏, 软件技术, 电脑与网络
gdj(游客)发表评论于2010/11/3 13:46:15 |
这个是看操作符的结合性把
http://www.cppreference.com/wiki/operator_precedence
赋值号是从右到左的结合,< 号是从左到右结合的 |
|
回复:一道非常有趣的c面试题 原创空间, 文章收藏, 软件技术, 电脑与网络
kk(游客)发表评论于2008/10/23 16:23:06 |
因为省了加个括号的工夫,导致所有后面阅读代码的人必须熟读c99的规范的诡异的一行。。。 |
|
» 1 »
|