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

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

ID:18247282

大小:198.44 KB

页数:10页

时间:2018-09-15

[++i 与i++]一道简单的题目引发的思考_第1页
[++i 与i++]一道简单的题目引发的思考_第2页
[++i 与i++]一道简单的题目引发的思考_第3页
[++i 与i++]一道简单的题目引发的思考_第4页
[++i 与i++]一道简单的题目引发的思考_第5页
资源描述:

《[++i 与i++]一道简单的题目引发的思考》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一道简单的题目引发的思考++i与i++——Don'tbelieveinmagic!Understandwhatyourprogramdo,howtheydo.引言昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象:01#include02#include03  04intmain(intargc,char**argv)05{06    inti=3,j;07    j=(i++)+(i++)+(++i);08    printf("i

2、=%d,j=%d",i,j);09    exit(0);10}您会怎样考虑这个问题呢?您不运行这个程序能准确地说出答案吗?我猜想肯定有大部分人不能肯定且准确地说出答案!如果您不能,这篇文章就是为你准备的,保证您看完之后豁然开朗!请细看下文,outline如下:1、诸君的回答我那这道题目问了几个人,他们的答案不尽相同。1.1、A君的回答good,noloosening.6.5.2DCSsidewiringtocompletetheenclosureandtheothersideafterthewiringiscomple

3、ted,DCSwithintheenclosurewhenthepowermoduleshouldbeloosenedorthepowergoesout.6.6lowvoltagecableterminalmaking6.6.1first因为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=1

4、6。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++。到底

5、哪个人说得对呢?2、编译器的输出首先让我们先来看看编译器会输出什么?2.1、VisualStudio的输出运行环境:Win7+VS2005orVS2010,输出如下图所示:good,noloosening.6.5.2DCSsidewiringtocompletetheenclosureandtheothersideafterthewiringiscompleted,DCSwithintheenclosurewhenthepowermoduleshouldbeloosenedorthepowergoesout.6.6lowvo

6、ltagecableterminalmaking6.6.1first2.2、GCC的输出运行环境:Ubuntu10.04+gcc(Ubuntu4.4.3-4ubuntu5)4.4.3,运行结果如下:2.3、VisualC++的输出运行环境:Win7+VC2010,输出和VS一样,及i=6&j=12看到这里你肯定想问why?why??why???3、分析重编译器的输出结果来看貌似C君、D君的分析都是对的,这种差异跟编译器有直接的关系,因为对于这个表达式怎么编译还没有形成标准,编译器的结合方向不同,答案因此会有所不同。而且当然还

7、包括运算符的优先级等。其实顶多算C君答对了一部分,其他几个人的回答都是错的,详情见下面的分析。3.1、gcc编译器上的分析(i++)+(i++)+(++i)<=>i+i+(++i);i++;i++;即如果表达式中含有i++,一律替换成i,然后在表达式之后进行i++操作。这样的话上面的代码就可以很好的理解了,即3+3+4=10。good,noloosening.6.5.2DCSsidewiringtocompletetheenclosureandtheothersideafterthewiringiscompleted,DCS

8、withintheenclosurewhenthepowermoduleshouldbeloosenedorthepowergoesout.6.6lowvoltagecableterminalmaking6.6.1first3.2、分析gcc编译之后的汇编代码可以对gcc编译之后的执行文件

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。