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

先给出结论:

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,做个记号。

原文地址:https://www.cnblogs.com/8586/p/1499805.html