社区
C语言
帖子详情
关于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
打赏
收藏
关于a++与++a 的问题
#include main() { int a =2; int b =4; ++a=b; printf("%d",a); getchar(); } 可以编译通过,但a++=b;就编译错误,说是a++不是一个左值. 为什么++a可以是左值,而a++不可以呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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了
A
++
浏览器.rar
各位需要的自取
a
++
与
++
a 的区别
a
++
和
++
a 都属于自增运算符,区别是对变量a的值进行自增的时机不同。a
++
是先进行取值,后进行自增。
++
a是先进行自增,后进行取值。 例如:假设 x=3,y=4; (1) (x
++
)+(
++
x)=8 解释:对于第一个(x
++
),因为x
++
是先取值后自增,所以(x
++
)所取得值为3,然后x进行自增,此时x=4;对于第二个(
++
x),因为...
自增运算符 和 a
++
++
+b 、 a
++
+
++
的理解
a
++
: 先将a的值代入表达式,在表达式运算完毕后,再将a进行
++
处理
++
a: 先将a进行
++
处理,再将a的值代入表达式 (注意咬字) a
++
++
+b在编译时会报错,(a
++
)+(
++
b)和a
++
+
++
b不会报错 “a
++
++
+b”这一段根本就无法解析,编译系统从左至右扫描整条语句,先遇到a
++
,判断出来是一个a的后缀自加运算,然后接着扫描,遇到一个+,+是一个二目运算符,它的左边已...
a
++
++
+b的含义
在C语言中,对于代码的分界采用的是贪心算法,也就是从按照从左到右可以组合的最大字符数来划分。 比如上面这个题:a
++
++
+b 从左到右开始,a可以和
++
组合,成为a
++
之后再分解为
++
,从前面开始算就是(a
++
)
++
之后为+b 也就是说按照贪心算法来算,a
++
++
+b可以分解成: ((a
++
)
++
)+b 因为a
++
的结果为左值,而左dao值不能再进行运算,故a
++
++
+b编译不能通过 除非写成a
++
+
++
b,在
++
b前面有个空格,这时候根据贪心算法分解为: (a
++
)+(
++
b) 编译通过 ...
a
++
++
+a等于什么
很多人遇到"
++
"、"--"就会晕了,这一下看到这么多加号是不是就更晕了。 如果a=2; 那么a
++
++
+a=? int b = 0; int a = 2; b = a
++
++
+a; 这种情况下b=什么 我们先拆解一下:b = a
++
+
++
a; 这样是不是就清楚一点了 这里除了
++
运算,还需要考虑运算符的优先级"
++
"的优先级是比"+"高的,也就是先运算"
++
" 关于优先级,可以去看C语言运算符优先级表详解_Eliauk1234的博客-CSDN博客 a
++
是后
++
,也就是先运算后+
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章