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。
。。。。。。。。。。。。。。。。。。
以上理解要是有什么不对的地方,敬请提出!
- C++里有趣的(++i)和(i++)
- ++i和i++的区别(C++)
- (C)探讨i++和++i
- ++i和i++ (自己的理解)
- 一个有趣的C语言问题:s = (++i) + (++i) + (++i)
- [C++]关于i++和++i的学习
- [C++]关于i++和++i的学习
- [C++]关于i++和++i的学习
- [C++]关于i++和++i的学习
- 【c++】i++和++i的区别
- 【c语言】i++和++i的区别
- (六十六)i++和++i,以及i--和--i
- i++和++i(续)
- (九)i++和++i
- (C++)i++和++i,哪个效率高一些
- for循环里的i++和++i的效率
- ++i,i++,--i和i--的区分
- (C++)关于i++和i++的左值、右值问题
- Lowest Common Ancestor of The Two Nodes in a Binary Tree
- hdu4415 贪心
- 配置vim
- 原码, 反码, 补码 详解
- 1
- C++里有趣的(++i)和(i++)
- Apache James 实战之“安装配置”james-3.x
- C语言 编写程序实现字符串拷贝,不允许调用strcpy函数。
- 数组-05. 字符串字母大小写转换(10)
- 19、FileWriter打开清空文件,RandomAccessFile的write方法
- LeetCode2 Add Two Numbers
- 第4周项目3对象数组操作长方柱类
- 题目1 : Magic Box【微软2016校园招聘在线笔试】
- 求两个数的最大公约数和最小公倍数