关于自加++,左值的问题

先给出结论:

i++ = 5;    错

++i = 5;    对

原因为何:i++的运算结果并不是i这个变量的引用,而是一个临时变量,其值为i的值,所以你无法进行以下运算:  
  i++=5;   甚至编译器不允许你对一个临时变量重新赋值,上面的表达式会引起编译错误   。

左值,说得通俗一点,就是可以出现在表达式左边的值(等号左边),可以被改变。  
  a   =   5;  
  a是左值。  
  不能被改变的值不是左值,常量像5,'a',"abc123"这种都不能做左值。  
  自加/减运算符的操作数如果不是左值就不能自加和减。  
  但i++的操作就不能作左值,它返回一个临时变量。++i可以是左值,它返回i被加1后的自己。a   =   (i++)   *   5   ;  
  ==>   temp   =   i;  
          i   =   i   +   1;  
          a   =   temp   +   5;  
  a   =   (++i)   *   5;  
  ==>   i   =   i   +   1;  
          a   =   i   *   5;  
  temp没有在你的程序中出现,那是编译器自动做的,你不能给temp赋值。

 

笔试碰到一题目:

 

1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C 错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11

 

因为对此题目含糊不清,导致错选c,做个记号。

本博客大部分为转载,本人不保证正确,请甄别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值