有趣的++运算符

前段时间看到blog上争论一道C++面试题,觉得很有意思,也想来多说几句.

这道题同以下的雷同.

int i=0,k=0;

i=(i++)+(i++)+(i++);

k=(++k)+(++k)+(++k);

问最后i,k的值是多少?

我确信没有程序员会写这样的代码,除非他真的不想干了.所以这道题出来之后很多人都说变态,因为在不同的编译器下,居然有不同的结果!

不过这道题并非完全没有价值,其实质就是要考面试者对++运算符在前或在后的区别.先我们不管上面这道题结果是多少,刚开始显得有点复杂,我们不如从简单的开始:

int i=2,k=2,s=0;

s=i++;  //结果s=2 ,i=3

s=++k; //结果s=3 ,k=3

s的结果相同吗?如果你以为是相同的,那你真得去复习下c++,答案是不同的.原因在哪里呢?

原来 i++是as the increment occurs after  the expression is evaluated,就是在表达式赋值后才自加1的,

而++k是as the increment occurs before the expression is evaluated,就是在表达式符值前就自加1了.所以就有不同的值哦. 但i同k最后都等于了3.

搞清楚了这一点,再回过头来看起初的这道题,不管不同的编译器结果是什么,我们都值得来烟酒下这道题:

 int i=0,k=0;

i=(i++)+(i++)+(i++);

由于自加发生在表达式赋值之后,所以我们分解如下:

int i=0,j;

j=(i++)+(i++)+(i++); //

cout<<"j="<<j<<endl;

cout<<"i="<<endl;

按照上面的理论,j的结果应该为0,但后来i的值在表达式赋值后又自加了三次,结果最终i的值应该为3.

同理,第二个++k可以如下理解:

int k=0;

k=(++k)+(++k)+(++k);

由于自加发生在表达式赋值之前,所以在表达式赋值给k的时候,k的值由1,2,3变成了最终的3,结果3个3相加,结果应该是9.

我不知道我讲得对不对,大家是否有不同的见解,欢迎拍砖.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值