社区
C语言
帖子详情
求解 关于++a = 10;合法,a++ = 10;不合法
colorblue
2012-01-18 11:37:31
c与指针书上写到:
int a = 0;
++a = 10;
++a的结果是a的值的拷贝,并不是变量本身,你无法想一个值赋值;
然后我用vc6编译下是可以的,但是a++ = 10;有语法错误, error:= 左边必须是变量;
求高手赐教;
...全文
1169
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]
学习了,呵呵
合法
矩阵的面积之和
给出一张n*m(1<=n,m<=2000)的矩阵,’.’ 代表空地,’#’ 代表障碍物,
合法
矩阵为内部不含障碍物的矩阵。求出所有
合法
矩阵的面积之和。 input 2 3 .#. …# output 8 input 3 3 … … … output
10
0 input 3 4 …#. #… …# output 40 先预处理出一个数组dp,记录每个点向上最大的
合法
高度。 对于每一行,维护...
[Jobdu] 题目1337:寻找最长
合法
括号序列
题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的
合法
括号子序列么?
合法
括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配;所有的右括号都有唯一的左括号匹配。例如:((()))()()便是一个长度为
10
的
合法
括号序列,而(()))( 则不是。 需要你
求解
的是,找出最长的
合法
括号子序列的长度,同时找出具有这样长度的序列个数。 输入: 测试...
C
++
DFS回溯算法:解决N<=
10
数字组合问题的2个关键陷阱与性能分析
本文深入探讨了C
++
DFS回溯算法在解决N≤
10
数字组合问题中的应用,重点分析了全排列生成中的两大关键陷阱:long long溢出问题和N=1时的零值处理。通过模运算优化和防御性编程,提供了性能优化策略和完整实现代码,帮助开发者高效解决此类数学约束问题。
codeforces 191A 线性DP
codeforces 191A 题意: 给定n个长度不超过
10
的字符串,收尾字母相同的字符串可以拼接在一起。给定n个长度不超过
10
的字符串,收尾字母相同的字符串可以拼接在一起。给定n个长度不超过
10
的字符串,收尾字母相同的字符串可以拼接在一起。 问最大环的长度。问最大环的长度。问最大环的长度。 题解: dp[i][j]表示以字母i为首,字母j为尾所能组成的字符串的最大长度。dp[i][j]表示...
2024杭电个人赛(1)--
合法
数对
数对 (x,y) 是好的,当且仅当 x⊕y=x | y,其中 ⊕ 表示异或操作,| 表示或运算。输出共 1 行,输出 1 个整数,表示最终答案,答案对 998244353 取模。给定正整数 N,请你
求解
有多少个好的数对 (x,y),满足 x,y∈[0,N]。因为出题人小 M 比较仁慈,所以 N 将以二进制的形式给出。输入共 1 行,包含一个正整数 N,通过二进制的形式给出。对于所有测评数据,1≤N
C语言
70,039
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章