C++里有趣的(++i)和(i++)

来源:互联网 发布:网络社会的崛起 编辑:程序博客网 时间:2024/05/16 14:42

刚才有一个同学问到一个问题关于C++中(++i)和(i++)的事,现在分析一下。

先说问题,第一种情况:

int j;

int i = 3;

j = i + i++;

cout<< j <<endl;

第二种情况:

int  i =3;

i = i + i++;

cout<< i <<endl;

大家想到两种情况下的结果了嘛?

。。。。。。

。。。。。。

第一种情况输出j = 6,第二种情况输出i = 7。这是为什么呢?跳过这个问题,先说一下C++中(++i)和(i++)的不同运算情况。大家都知道++i是对+1之后的i参与运算,而i++是先让i参与运算,再计算i+1,下面就以实例讲解

int i = 3;

k = (++i) + (++i);  //++的优先级高于+,先执行++i和++i,i自增了两次结果i=5,再执行k = i+i,结果k=5+5=10

k = (i++) + (++i);  // 应该先执行i++和++i,再执行+,i++不影响赋值结果i++ =3(但此时i =4),++i=5,k=3+5=8

k = (++i) + (i++); // 同上,结果应该是k = 4+4=8

//或者可以进行以下分解(以i为3为例):
//++i 分解为:自增,赋值1 i=i+1=4,k=i=4;
//i++ 分解为:赋值1,自增 k=i=3, i=i+1=4;
//(++i)+(++i) 分解为:自增,自增,赋值1,赋值2,加法 i=i+1=4,i=i+1=5,g=i=5,m=i=5,k=g+m=10;
//(i++)+(++i) 分解为:赋值1,自增,自增,赋值2,加法 g=i=3,i=i+1=4,i=i+1=5,m=5,k=g+m=8;
//(++i)+(i++)分解为:自增,赋值1,赋值2,自增,加法 i=i+1=4,g=i=4,m=i=4,i=i+1,k=g+m=8;  (参考http://tieba.baidu.com/p/1645779750)

通过上面的分析大家发现了嘛,不管是i++还是++i,对i值都会产生影响,但是对产生的赋值是不同的,++i对赋值产生的影响是i+1,而i++最后的结果还是i,这样大家可以知道 k= (i++) + (i++)的结果了嘛!

那么,回到一开始提出的问题,按照上面的总结,第一种情况 j = 3+3(i = 4);

第二种情况下 ,先执行i + (i++) = 6,然后 i++ =i +1 = 6+1=7。

。。。。。。。。。。。。。。。。。。

以上理解要是有什么不对的地方,敬请提出!

0 0
原创粉丝点击