k=(++i)+(i++)+(++i)等关于i++和++i自加问题的自学归纳

【注】本文是自己总结而来,采用的编译器是codeblocks,结果一定是正确的;
我只是讨论一下自己的思维方式,这是经过我自己推导出来的,请各位自己确定其是否有参考价值,欢迎大家指正。

首先我们来看下面这张图片,其中int i=3:在这里插入图片描述
图中4个表达式中i最后的值均是5,说明在每个(i++)和(++i)i的实际值是增加了1的;但是要注意的是:
1.(i++)该!表达式!(始终注意它是一个表达式)的值为i;之后i再自增1;千万不要弄混了。y=(i++)与y=i++的值是一样的均为3。y与i只是间接的关系其值直接等于表达式(i++)的值。
2.(++i)取的是当前变量自增1后i的值,在运算过程中i是被不断更新的(被覆盖),其的取值为最新的那一个值。

###########原理推导###########

下面我们来推导一下程序是如何进行的:
1.k=(i++)+(i++):
k的值为7,可以分解为k=3+4=7;
计算完第一个(i++)的值为当前i的值3,后i自增1,i=4;
“+”为双目,先计算右边(i++)的值,其为此时i的值为4,所以k的值为7。
2.k=(i++)+(++i):
k的值为8,可以分解为k=3+5=8;
计算完第一个(i++)的值为当前i的值3,后i自增1,i=4;
“+”为双目,先计算右边(++i)的值,注意其为4+1=5,所以k的值为8。
3.k=(++i)+(++i):
k的值为10,可以分解为k=5+5=10;
计算完第一个(++i)的值为当前i的值3+1=4,注意此时它还没有被更新,因为
“+”为双目运算符,先计算右边(i++)的值,为当前i的值4+1=5,这是最新i的值,前者的取值被后者覆盖跟随后者,同时更新,所以k的值为5+5=10而不是4+5=9。
4.k=(++i)+(i++):
k的值为9,可以分解为k=5+4=9;
计算完第一个(++i)的值为当前i的值3+1=4,i=4;
“+”为双目,结果保留,先计算右边(i++)的值,注意其为4,但之后i更新为i+1=4+1=5,所以(++i)更新为5,k的最后结果为9.

#################实践证明#########

那么,由此我门看 :
k=(i++)+(i++)+(i++),分解为:k=3+4+5=12
k=(i++)+(i++)+(++i),分解为:k=3+4+6=13
k=(i++)+(++i)+(++i),分解为:k=3+5+6=14
k=(i++)+(++i)+(i++),分解为:k=3+5+5=13
k=(++i)+(++i)+(++i),分解为:k=5+5+6=16
k=(++i)+(++i)+(i++),分解为:k=5+5+5=15
k=(++i)+(i++)+(i++),分解为:k=5+4+5=14
k=(++i)+(i++)+(++i),分解为:k=5+4+6=15
其中i最后的值均为6.

如果还不懂没关系,我们加入几个乘法:
k=(++i)* (++i ),分解为:k=5 *5=25 i=5

k=(++i) (++i) + (++i)分解为:k=55+6=31
这里
是双目(++i)更新为5后得出25的结果。

k=(++i)+(++i) (++i),分解为:k=6+6*6=42
这里先计算(++i)为3+1=4,+为双目,保留;
()优先级最高,计算第二个(++i),又 * 为双目且优先级高于+,
先保留5,计算右边第3个(++i),最后统一更新,k=6 * 6+6=42

k=(++i)+(++i)*(i++),分解为k=6+6 * 5=36
这里先计算(++i)为3+1=4,+为双目,保留;
()优先级最高,计算第二个(++i),又 * 为双目且优先级高于+,
先保留5,计算右边(i++)的值为5,i自增1变为6,最后统一更新(++i)
所以k=6+6 * 5=36

k=(++i)+(i++)*(i++),分解为k=6+4 * 5=26
这里先计算(++i)为3+1=4,+为双目,保留;
()优先级最高,计算(i++)为4,i自增1为5,又 * 为双目且优先级高于+,
先保留5,计算右边(i++)的值为5,i自增1变为6,最后统一更新(++i)
所以k=6+4 * 5=26


本文仅供参考

  • 23
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值