电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

[++i与i++]一道简单的题目引发的思考VIP免费

[++i与i++]一道简单的题目引发的思考_第1页
1/10
[++i与i++]一道简单的题目引发的思考_第2页
2/10
[++i与i++]一道简单的题目引发的思考_第3页
3/10
一道简单的题目引发的思考 ++i 与i++ ——Don't believe in magic !Understand what your program do ,how they do . 引言 昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象: 01 #include 02 #include 03 04 int main(int argc,char** argv) 05 { 06 int i=3,j; 07 j=(i++)+(i++)+(++i); 08 printf("i = %d, j = %d\n",i,j); 09 exit(0); 10 } 您会怎样考虑这个问题呢?您不运行这个程序能准确地说出答案吗?我猜想肯定有大部分人不能肯定且准确地说出答案!如果您不能,这篇文章就是为你准备的,保证您看完之后豁然开朗!请细看下文,ou tline 如下: 1、诸君的回答 我那这道题目问了几个人,他们的答案不尽相同。 1.1、A君的回答 因为i = 3,故依次i++=4,i++=5,++i=6,i 最后输出为i = 6;但是由于前面两个++是后置++,最后一个++是前置++,故j = 3+4+6 = 13。 1.2、B 君的回答 因为i = 3,故第一个i++后为4,第二个i++后为5,接着做 i+i 操作 = 5+5=10,最后与(++i)相加 = 10+6=16。 1.3、C 君的回答 因为i = 3,故依次i++=4,i++=5,++i=6,i 最后输出为i = 6;但是第一i、第二个i的++是后置++,先进行 i+i 操作,然后进行两次i++后置操作,故等价于(i)+(i) = 3+3=6,i++,i++,最后与++i=6 相加等于12。 1.4、D 君的回答 因为i = 3,故依次i++=4,i++=5,++i=6,i 最后输出为i = 6;但是前面两个++都是后置++,故先做 i+i+(++i)操作,然后才在 i++,i++操作,第三个++是前置++,故等价于 i+i+(++i)=3+3+4=10,i++,i++。 到底哪个人说得对呢? 2、编译器的输出 首先让我们先来看看编译器会输出什么? 2.1、Visu al Stu dio 的输出 运行环境:Win7+VS2005 or VS2010,输出如下图所示: 2.2、GCC 的输出 运行环境:Ubuntu 10.04+gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3,运行结果如下: 2.3、Visu al C++的输出 运行环境:Win7+VC2010,输出和 VS 一样,及 i = 6 & j = 12 看到这里你肯定想问 why? why?? why??? 3、分析 重编译器的输出结果来看貌似 C 君、D 君的分析都是对的,这种差异跟编译器有直接的关系,因为对于这个表达式怎么编译还没有形成标准,编译器的结合方向不同,答案因此会有所不同。而且当然还包...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

[++i与i++]一道简单的题目引发的思考

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部