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

先给出结论:

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

本博客大部分为转载,本人不保证正确,请甄别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值