error C2106: “=”: 左操作数必须为左值

AFreshGirl 2012-11-13 09:12:25

char* a = NULL;
char *b = NULL;
*a++ = *b++;

这个可以通过编译而

int a = 0;
int b = 0;
a++ = b++;

这个在VC里编译会报错:error C2106: “=”: 左操作数必须为左值

百思不得其解啊

...全文
4287 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nick_0501 2012-11-13
  • 打赏
  • 举报
回复
引用 楼主 liqiac 的回复:
C/C++ code?1234char* a = NULL; char *b = NULL;*a++ = *b++; 这个可以通过编译而 C/C++ code?1234int a = 0;int b = 0;a++ = b++; 这个在VC里编译会报错:error C2106: “=”: 左操作数必须为左值 百思不得其解啊
第一个运行会出错的, 第二个a++ 返回的是常量,不能作为=号的左值
AFreshGirl 2012-11-13
  • 打赏
  • 举报
回复
我想明白了
骁Captain 2012-11-13
  • 打赏
  • 举报
回复
必须清晰定义存储位置才可以作为左值。 a++的值是a原来值的一份拷贝,但是这份拷贝的存储位置并不知道,所以它不是合法的左值。
转角天边 2012-11-13
  • 打赏
  • 举报
回复

*a++ = *b++;
这条语句等于

*a=*b;
a++;
b++;
breakfisher 2012-11-13
  • 打赏
  • 举报
回复
c语言标准规定, 赋值符必须用可修改的左值作为它左边一侧的操作数。 a++ 本身是一个操作数, 在运行时代表的就是一个常量,是不可修改的
转角天边 2012-11-13
  • 打赏
  • 举报
回复
引用 楼主 liqiac 的回复:
C/C++ code?1234char* a = NULL; char *b = NULL;*a++ = *b++; 这个可以通过编译而 C/C++ code?1234int a = 0;int b = 0;a++ = b++; 这个在VC里编译会报错:error C2106: “=”: 左操作数必须为左值 百思不得其解啊
=号左边不能是表达式
j8daxue 2012-11-13
  • 打赏
  • 举报
回复
*a++是指针++后取数组某元素,有用法如: wchar_t * __cdecl wcscpy(wchar_t * dst, const wchar_t * src) { wchar_t * cp = dst; while( *cp++ = *src++ ) ; /* Copy src over dst */ return( dst ); } 一般类型后置++返回的临时变量,不可赋值。
longburulin 2012-11-13
  • 打赏
  • 举报
回复
*a++ 这个后面还是个指针 只是地址不同而已 a++是一个值
armsword 2012-11-13
  • 打赏
  • 举报
回复
*a++ 只得是地址,当然能做左值。 a++ 是个值。

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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