社区
C语言
帖子详情
求解 关于++a = 10;合法,a++ = 10;不合法
colorblue
2012-01-18 11:37:31
c与指针书上写到:
int a = 0;
++a = 10;
++a的结果是a的值的拷贝,并不是变量本身,你无法想一个值赋值;
然后我用vc6编译下是可以的,但是a++ = 10;有语法错误, error:= 左边必须是变量;
求高手赐教;
...全文
1157
11
打赏
收藏
求解 关于++a = 10;合法,a++ = 10;不合法
c与指针书上写到: int a = 0; ++a = 10; ++a的结果是a的值的拷贝,并不是变量本身,你无法想一个值赋值; 然后我用vc6编译下是可以的,但是a++ = 10;有语法错误, error:= 左边必须是变量; 求高手赐教;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]
学习了,呵呵
合法
矩阵的面积之和
本文介绍了一种
求解
矩阵中
合法
区域面积之和的高效算法。通过预处理DP数组记录每个点的最大
合法
高度,使用单调栈维护每行的高度信息,从而计算所有
合法
矩阵的面积总和。
[Jobdu] 题目1337:寻找最长
合法
括号序列
本文介绍了一种使用C
++
实现的算法,用于解决给定括号序列中寻找最长
合法
括号子序列的问题。算法通过标记匹配情况,利用栈结构进行辅助计算,最终输出最长
合法
子序列的长度及出现次数。
codeforces 191A 线性DP
博客围绕codeforces 191A题目展开,题目给定n个长度不超
10
的字符串,收尾字母相同可拼接,要求最大环长度。题解使用dp[i][j]表示以字母i为首、j为尾的字符串最大长度,先拼接后成环,通过遍历和状态转移
求解
,还进行了特判。
C
++
DFS回溯算法:解决N<=
10
数字组合问题的2个关键陷阱与性能分析
本文聚焦于使用C
++
实现DFS回溯算法
求解
N≤
10
数字组合中能被K整除的最小
合法
整数问题,重点剖析long long溢出与N=1零值处理两大关键陷阱,并提出模运算剪枝、首位剪枝、预排序等优化策略,结合复杂度分析与压力测试验证性能提升效果。
2024杭电个人赛(1)--
合法
数对
博客围绕
求解
满足特定条件的好数对 (x,y) 数量展开,给定正整数 N 以二进制形式给出,需找出 x,y∈[0,N] 且 x⊕y=x | y 的好数对数量。采用动态规划方法,定义状态表示,给出状态转移方程,并给出了输入输出示例。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章