深谈i++和++i

首先,我们先来了解一下在C++中什么是表达式什么是语句
表达式:表示运算的式子
1.可以是一个变量、常量  如:a,b,5
2.也可以是一个用运算符将表达式连起来的式子   如:3+5、a+b
语句:表达完整的命令
eg: int a;//声明语句
  a = 5; //赋值语句
  a+b; //表达式语句
  ; ; ; //空语句
其实语句就可以简单理解为表达式后面加分号“;”

i++和++i的作用

相信大家都听过这么一句话,i++和++i本质上没有什么区别,都是使变量i在数值上加1
它的效果就跟 i=i+i; 语句一样。

1.for语句中作自增运算符时

for(int i = 0; i < 5; i++)
{
	if(i)
	cout << " " ;
	cout << i ;
}
for(int i = 0; i < 5; ++i)
{
	if(i)
	cout << " " ;
	cout << i ;
}

这里呢,i++跟++i是没有什么区别的。

但是我想,大家应该还听过一句话,它们还是有一点区别的
嗯,对的,今天我主要就是想谈谈它们这一细微的区别

2. 用于赋值表达式(赋值语句)时

int a, b,i = 0;
	a = i++;
	b = ++i;
	cout << a << " " << b << " " << i << endl;
结果: 0 2 2

为什么会是这种结果呢?
因为在在自增运算符作表达式(语句)时,前自增++i和后自增i++分别代表自增前自增后i的值。
在该例子中,a获得的就是i++即自增前的值0,而b获得的就是自增后的值2,不过为什么是2呢?
这是因为在a = i++;的式子中,i已经给自己加1了,只不过它赋给a的值是它自增前的,所以在执行到b=++i时,i在数值上已经是1了,于是在执行b = ++i时,b获得i再一次自增后的数值,即1+1=2。

眼尖的朋友,应该已经看到了我标绿色的那段话了,为什么我要把这段话标绿呢?
这是因为在前两天,有个朋友问了我一个问题当程序依次执行i = i++;a = i;最后a和i的结果会是什么?
	int i = 0, a;
	i = i++;
	a = i;
	cout << i << " " << a << endl;
结果:0 0;

到这里,小伙伴们可能会有点疑惑,为什么a的值是0呢?
这也是我这篇博客讨论自增的重点
这涉及到了运算优先级的问题
首先,你要知道,自增运算符的优先级要高于乘除运算符,而乘除运算符优先级高于赋值运算符
而计算在执行语句时,会优先进行优先级高的运算
也就是说,在执行i = i++时,i已经被加1了,但是它是后自增作表达式,故它又将自增前的值0赋给了自己,覆盖了加1后值,所以执行完i = i++后,i的值是0.

如果你觉得本篇文章对你有帮助的话,留下你的赞让我知道你来过可好?
谢谢!

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值