关于a++与++a 的问题

zhusirener 2006-11-08 01:02:07
#include<stdio.h>
main()
{
int a =2; int b =4;
++a=b;
printf("%d",a);
getchar();
}
可以编译通过,但a++=b;就编译错误,说是a++不是一个左值.
为什么++a可以是左值,而a++不可以呢?
...全文
275 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
linjixin123 2006-11-08
  • 打赏
  • 举报
回复
++的级别比=高
所以先执行++
a++执行是这么操作的:先产生一个副本,然后使用副本进行操作,该语句执行完后原值+1.
这样的话 = 号实际上是操作在副本上的
左值必须是一个可以引用到的地址,很明显这个副本的地址我们不清楚,所以是错误的.
ysc918 2006-11-08
  • 打赏
  • 举报
回复
前加/减的结果是一个lvalue,而后加/减的结果是一个rvalue,因此(++a)++合法,而++(a++)不合法(因为++运算符要求其操作数必须是一个lvalue)。
以下可以作为lvalue:
(1)单个变量
(2)返回引用的函数调用
(3)前置++和前置--
左值表达式也是右值表达式,但右值表达式不一定为左值表达式。
huangyangman 2006-11-08
  • 打赏
  • 举报
回复
左值右值偶也理解不深
weijiangshanwww(天气预报:今天会下分,偶尔下几颗星星!)
前缀返回引用
后缀返回一个临时变量
好象有点道理,学习
malligator 2006-11-08
  • 打赏
  • 举报
回复
白白自增了呀?????????????????????????????

LZ想开发编译器??????????????????????????????????????
jixingzhong 2006-11-08
  • 打赏
  • 举报
回复
++a=b;

这样可以通过是因为你这里不是 对++a赋值,
而是 先++a,然后 a=b,
分析这个运行过程,
对 a 进行 ++ 自然是可以的 ...

其实对于这样的++/--语句,
建议不要这样结合,
可能导致潜在的问题 ...
jixingzhong 2006-11-08
  • 打赏
  • 举报
回复
a++与++a 都不是左值
weijiangshanwww 2006-11-08
  • 打赏
  • 举报
回复

左值的返回值必须是引用的!
weijiangshanwww 2006-11-08
  • 打赏
  • 举报
回复

前缀返回引用
后缀返回一个临时变量
dead_of_winter 2006-11-08
  • 打赏
  • 举报
回复
a++不是左值
不是优先级的问题
(a++)=b;也不能运行
ckt 2006-11-08
  • 打赏
  • 举报
回复
运算符优先关系
=要比++高
myfriend023 2006-11-08
  • 打赏
  • 举报
回复
a++是先使用后自加 a++=b 相当与是把a=b做左值了吧 所以不可以的
caixia615 2006-11-08
  • 打赏
  • 举报
回复
a++就是一个完整的语句,代表执行后a的值加1,++a则是代表执行前就已经值加1了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧