社区
C语言
帖子详情
求解 关于++a = 10;合法,a++ = 10;不合法
colorblue
2012-01-18 11:37:31
c与指针书上写到:
int a = 0;
++a = 10;
++a的结果是a的值的拷贝,并不是变量本身,你无法想一个值赋值;
然后我用vc6编译下是可以的,但是a++ = 10;有语法错误, error:= 左边必须是变量;
求高手赐教;
...全文
410
11
打赏
收藏
求解 关于++a = 10;合法,a++ = 10;不合法
c与指针书上写到: int a = 0; ++a = 10; ++a的结果是a的值的拷贝,并不是变量本身,你无法想一个值赋值; 然后我用vc6编译下是可以的,但是a++ = 10;有语法错误, error:= 左边必须是变量; 求高手赐教;
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iamnobody
2012-01-18
打赏
举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
就是这样的。
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值
这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]
在C语言中,++a,a++都是右值表达式。=号左操作数要求是左值表达式,所以两者都是错的。
但是在C++中,++a是右值表达式。所以在C++中符合语法。
c++03标准是未定义行为,c++11标准不是未定义的。
pathuang68
2012-01-18
打赏
举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
就是这样的。
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值
这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]
按错了键,还没有说完就直接回复了:)
修改上面回复的typo:
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,因此(一次)不能作为左值
这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
因此严格地说,++a = 0在语法上是正确的(grammartically correct),而a++ = 0在语法上是错误的(grammartically wrong)。但是两种写法在语义上都不正确(semantically wrong)
peng_weida
2012-01-18
打赏
举报
回复
原来如此
[Quote=引用 2 楼 pathuang68 的回复:]
就是这样的。
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,因此不能作为左值
这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]
arfi
2012-01-18
打赏
举报
回复
还是真不懂,估计和编译器自身相关。
在 linux 下,++a = 10; 也是编译不过的。
test2.c: In function ¡®main¡¯:
test2.c:7: error: lvalue required as left operand of assignment
面包大师
2012-01-18
打赏
举报
回复
编译器的问题,只能表明a++ = 10这句不符合VC6的语法,出现了语法错误,但不一定表示这句就是错的
pathuang68
2012-01-18
打赏
举报
回复
就是这样的。
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值
这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
Trinx
2012-01-18
打赏
举报
回复
那两种写法都是有问题的,何必追究。
proorck6
2012-01-18
打赏
举报
回复
学生代码
正规程序员应该不会在这个问题上纠缠。
mingchaoyan
2012-01-18
打赏
举报
回复
这些在学习时钻钻牛角尖,工作时基本 不会这么写
daviddb7
2012-01-18
打赏
举报
回复
真纠结,简单的说
++a=10就是a=10;a+1;
a++=10就是a+1=10,怎么能赋值
另外++这种操作要看编译器是怎么解释的了,结果很可能不一样,所以不推荐++和=放在一条语句里执行。
colorblue
2012-01-18
打赏
举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
就是这样的。
++a用的是a的引用,因此可以作为左值
a++用的是对象拷贝,一次不能作为左值
这也是为什么在for循环中,++i比i++快的原因,当然如果编译器对此做了专门的优化的话,那么从性能上来说是没有区别的。
[/Quote]
学习了,呵呵
C语言二级试题及答案
广西二级,有需要的就看看
浙江大学《程序设计基础及实验》课程期末考试试卷
试卷,浙江大学 2011–2012 学年冬季学期 《程序设计基础及实验》课程期末考试试卷
程序设计基础--错题回顾1
i+=3,j+=7){}这类问题是跑圈追赶问题:unsigned short能表示216个数,其范围为0~216-1,j在i前2个位置,i以5的速度增长,j以7
利用Warshall算法求二元关系的可传递闭包.docx
利用Warshall算法求二元关系的可传递闭包.docx
C程序的流程程序控制结构与语句.pptx
C程序的流程程序控制结构与语句.pptx
C语言
70,020
社区成员
243,266
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章