增量和减量

 

  增量和减量操作符表示为:++和--。
  增量操作表示加1,减量操作表示减1。例如:
   a++; //相当于a=a+1;
   ++a; //相当于a=a+1;
   a--; //相当于a=a-1;
   --a; //相当于a=a-1;
  增量操作符有前增量与后增量之分。前增量操作++a的意义为:先修改操作数使之增1,然后将增1过的。值作为表达式的值。而后增量操作a++的意义为:先将变量a的值作为表达式的值确定下来,再将a增1。对于增量和减量操作符,它要求操作数是左值,因为操作数的值要发生变化。例如:
   int a=3;
   int b=++a;//相当于a=a+1;b=a;
   cout <<a <<" " <<b <<endl;
   int c=a++; //相当于c=a;a=a+1;
   cout <<a <<" " <<c <<endl;

  输出的结果为:
   4 4
   5 4

  b被赋予了4, 因为前增量操作先将a自增为4,然后作为表达式赋值。C被赋予了4,因为后增量操作使表达式的值(a)先赋给c,然后a再自增值为5。
  由于前增量操作返回的值即修改后的变量值,所以返回的仍是一个左值。例如:
   int a=3;
   ++(++a); //Ok:++a是左值

  例中得到的a的值为5。
  由于后增量操作返回的值是原先a的值,尔后a的值已经发生变化,故返回的不能是当前a,只能是过去的a值,不能是左值。例如:
   int a=3;
   ++(a++); //error:a++不是左值

  相应的,有前减量--a和后减量a--。例如:
   int a=3;
   int b=--a;//相当于a=a-1;b=a;
   cout <<a<<" " <<b<<endl;
   int c=a--;//相当于c=a;a=a-1;
   cout <<a <<” ” <<c <<endl;

  输出的结果为:
   2 2
   1 2

  由于增量与减量操作包含有赋值操作,所以操作数不能是常量,它必须是一个左值表达式。例如:
   3++; //error
  增量与减量操作符是两个+或两个-的一个整体,中间不能有空格。如果有多于两个+或两个-连写的情况,则编译首先识别前面两个+或-为增量或减量操作符。
  例如,对于“int a=1,b=5,c;”的变量定义,下面5个表达式,有些不允许:
   c=a+b; //ok:c=6
   c=a++b; //error:编译接收为a ++ b
   c=a+++b; //ok:编译接收为a++ + b
   c=a++++b; //error:编译接收为a++ ++b
   c=a+++++b; //error:编译接收为a++ ++ +b
  第2行中,编译将其理解为a ++ b。由于++操作是单目运算符,所以该表达式语法错误。若要合法,应写成a+ +b,表示a加上正b。
  第4行中,编译将其理解为a++ ++b。 同样由于++是单目操作符,引起编译错误。若要合法,应写成a+++ +b,表示a++加上正b。
  第5行中,编译将其理解为a++ ++ +b。由于a++是个非左值表达式,所以中间的++操作符是非法的。若要合法,应写成a+++ ++b或者a++ + ++b,表示a++加上++b。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值