论坛: 编程破解 标题: 一个很有趣的C语言问题 复制本贴地址    
作者: 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号