先给出结论:
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,做个记号。