|
![]() | 作者: jaychou [jaychou]
![]() |
登录 |
大家请看下面两个程序 (1)main() { int a=2,b=3; printf("%d",++b+a*b); } (2)main() { inta=2,b=3,y; y=++b+a*b; printf("%d",y); } 为什么这两个程序的结果不一样???第一个的结果是10,第二个才是我想要的结果12 我是在TC2.0上试验的,请大家试验之后帮我解答一下,谢绝与此帖无关的回复 |
地主 发表时间: 04-12-04 15:28 |
![]() | 回复: hackgou [hackgou] ![]() |
登录 |
这两个程序在我的VC6.0和GNU/GCC上的结果都是12。 所以你是不是再检查一下你的TC?? ![]() |
B1层 发表时间: 04-12-04 23:19 |
![]() | 回复: luren [zhzhzhwx] ![]() |
登录 |
我用TC2.0运行过,结果和楼主说的一样,可能是TC2.0的问题吧?? |
B2层 发表时间: 04-12-05 13:14 |
![]() | 回复: jaychou [jaychou] ![]() |
登录 |
高手们都哪去了?版主们都哪去了? |
B3层 发表时间: 04-12-05 15:59 |
![]() | 回复: autosee [autosee] ![]() |
登录 |
跟编译器有关。为了在程序中能获得正确的返回值,请尽量不要在输出语句中对变量进行运算。 |
B4层 发表时间: 04-12-06 16:18 |
![]() | 回复: 286 [unique] ![]() |
登录 |
我给楼主一个建议:千万别让谭HQ这样的人给骗了。看和理解这种程序实在是没有任何意义。 我的手下如果用这种编码,我会全部退回让他们重写。 这种格式除了中国的考试上会用,别无任何用处。 |
B5层 发表时间: 04-12-09 13:29 |
![]() | 回复: virgoshaka [virgoshaka] ![]() |
登录 |
有道理~ |
B6层 发表时间: 04-12-09 14:44 |
![]() | 回复: jaychou [jaychou] ![]() |
登录 |
实话实说,我也很鄙视谭浩强那个老匹夫,不过我也真的很想知道这是为什么阿?! |
B7层 发表时间: 04-12-10 00:37 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
不同意286说不要理会这个问题,鄙视楼主侮辱谭浩强是老匹夫 我可以给出一个可能的答案,但 1、我试过你的程序,确实一样,没得说 2、答案是我自己编得,一点依据都没有,错了不负责 第一个程序 ++b+a*b的计算顺序是: temp=a*b; temp=++b+temp; 第二个程序 temp=++b; temp=temp+a*b; 我现在看这个答案,他是唯一的解释,而且也是合理的解释,大概应该是对的 计算顺序为什么会这样? I don't know,但希望有人给出解释,因为我感觉这个问题因该跟编译原理中的一些东西有关,说不定扯扯扯又扯出一些关于汇编的问题 同意286说的这种东西不符合软件工程规范,并且建议不要使用++x之类的方式进行计算,我用过,用的时候觉得很高手,像个黑客的程序,用完以后觉得很恶心,因为真的是过了一个星期以后自己也看不懂了。 最后:感谢谭浩强老先生为中国计算机的教育事业做出的伟大贡献,大家不要觉得他讲的东西老掉牙了,很多是很有用的。 阿弥陀佛 |
B8层 发表时间: 04-12-10 10:13 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号