C++——i++与++i

本文说说C++的自增(++)


下面是一道题:

#include<iostream>
using namesapce std;


int main()
{
int i=1,j;
printf("%d\n",++i);//(1)
printf("%d\n",i++);//(2)
j=i++;
printf("%d\n",j);//(3)
j=++i;
printf("%d\n",j);//(4)
printf("%d\n",-i++);//(5)
printf("%d\n",-i--);//(6)
i=1;
printf("%d\t%d\n",i++,++i);//(7)
    printf("%d\n",i);//(8)
i=1;
cout<<i++<<" "<<++i<<endl;//(9) 
cout<<i<<endl;//(10)
return 0;
}
求输出结果。


知识点:

(1)基本的,++i,+在i前,就是先+后用i;i++,+在i后,就是先用i后+,所以,(1),(2)输出2,2。

(2)对于赋值表达式,也是同样道理,所以在(3),j=i++,+在i后:先用i,就是先将i赋值给j,然后在i+1,输出j是3;在(4),j=++i,i在+前:先i+1,然后再用i赋值给j,输出j是5(i在此前已是4)。这里额外说一说,自增运算符(++)和自减运算符(--)只能作用于变量,而不能作用于常量或表达式,例如8++或(x+y)++都是不合法的。

(3)对于“-i++”,首先我们要知道,--和++都是和+,-,*,/,%一样是算术运算符,结合性是自右向左,所以“-i++”应该是-(i++)。那么在(5)前,i=5,所以在-(i++)中,先用i后+,所以是输出-5(因为有负运算符号),然后再++,i就是6了,所以同样道理,在(6)里,先用i,输出-6,再--,i最后是5。

(4)我猜很多人都会错(7)~(10),在许多编译器,包括Visual C++和GCC,在处理流时,都是按自右向左的顺序对各输出项求值。所以,在(7)和(10)里,先处理++i,再处理i++,所以输出的都是2和2。这就是使用自增自减的副作用了。


输出结果:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值