- 论坛徽章:
- 0
|
本帖最后由 sanday9 于 2013-08-28 10:53 编辑
我知道i++是先返回i再++
++i是自增了i再返回
因此
- int i=1;
- printf("%d\n",i++);
复制代码 打印1,而
- int i=1;
- printf("%d\n",++i);
复制代码 打印2.
但是下面的实验:
- #include<stdio.h>
- int main(void)
- {
- int i=1;
- printf("%d\n",(i++)+(i++));//每个子表达式都先返回1,再自增。打印2,和我期待的一致
- i=1;
- printf("%d\n",(i++)+(++i));//打印4,我期待的结果是print(1+3),和期待一致
- i=1;
- printf("%d\n",(++i)+(i++));//打印4,我期待的结果是print(2+2),和期待的一致
- i=1;
- printf("%d\n",(++i)+(++i);//打印6,我期待的结果是print(2+3),和期待不一致
- return 0;
- }
复制代码 唯一的问题是,我认为(++i)+(++i)先自增i得到2,第一次返回,然后再自增i得到3,第二次返回,两次返回的结果相加=5.但是实际上打印6
我用vc2012的debug/release以及GCC4.4.6都是这样的结果。这是为什么呢?
我的理解问题在哪里? |
|