c语言左值问题

树无影 2010-12-24 10:33:59
#include <stdio.h>

int main()
{
int a ;

a = 2 ;

//(a ++) += 2;对于赋值语句,左值是不能变的

(++ a) += 2;

printf("%d\n",a);

return 0;
}
这个程序保存为test.会报错,保存为test.cpp没有问题啊,这是为什么啊?我用的是vc6.0
...全文
313 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mark0904 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lx3275852 的回复:]

引用 8 楼 haotiantoping 的回复:
为什么啊 有test.c不行啊??

回楼主,有的C编译器 ++a += 2; 可以编译通过,但是一般的不行
C++中,支持运算符重载,把运算符++看作函数而已
前++:
int& operator++(int& a)
{
a = a + 1;
return a;
}
后++:
int opera……
[/Quote]
顶。。。
2220728 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 e3399 的回复:]
引用 8 楼 haotiantoping 的回复:

为什么啊 有test.c不行啊??

我也是用GCC编译啊。

C/C++ code
int main()
{
int a;

a = 2;
//(++a) += 2;

(a++) += 2;
printf("%d\n", a);

return 0;
}
……
[/Quote]
用VC6.0 a++的能通过啊哈~~~
顶11楼
wweixinkuang 2010-12-24
  • 打赏
  • 举报
回复
顶一下,1楼解释的不错
树无影 2010-12-24
  • 打赏
  • 举报
回复
为什么啊 有test.c不行啊??
tracyjk 2010-12-24
  • 打赏
  • 举报
回复
gcc编译
++a和a++都能作为左值..
Mark0904 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q191201771 的回复:]

因为a++需要先返回一个值为a的临时变量再对a++, 所以不能作为左值
而++a返回的就是a(只不过它的值已经+了1), 所以能作为左值
[/Quote]
我试了下
++a也不能作为左值吧。
zy020118 2010-12-24
  • 打赏
  • 举报
回复
1楼正解
yukiwang313 2010-12-24
  • 打赏
  • 举报
回复
等式左值是变量(即你定义的变量),右边可以是表达式,常量等。右边赋值给左边,系统给左边的变量分配了一块空间,怎么可能再改变呢?初学的话,把左值和右值搞清楚就好啦~
King_returns 2010-12-24
  • 打赏
  • 举报
回复
楼上正解
clear0000 2010-12-24
  • 打赏
  • 举报
回复
同楼上。
就想叫yoko 2010-12-24
  • 打赏
  • 举报
回复
因为a++需要先返回一个值为a的临时变量再对a++, 所以不能作为左值
而++a返回的就是a(只不过它的值已经+了1), 所以能作为左值
Mark0904 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 haotiantoping 的回复:]

为什么啊 有test.c不行啊??
[/Quote]
我也是用GCC编译啊。
int main()
{
int a;

a = 2;
//(++a) += 2;

(a++) += 2;
printf("%d\n", a);

return 0;
}
//a++和++a都不能作为左值啊
// error: lvalue required as left operand of assignment

morgan_xww 2010-12-24
  • 打赏
  • 举报
回复
我也来个 ,顶一楼。。。。
dfatfat 2010-12-24
  • 打赏
  • 举报
回复
1楼正解
lx3275852 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 haotiantoping 的回复:]
为什么啊 有test.c不行啊??
[/Quote]
回楼主,有的C编译器 ++a += 2; 可以编译通过,但是一般的不行
C++中,支持运算符重载,把运算符++看作函数而已
前++:
int& operator++(int& a)
{
a = a + 1;
return a;
}
后++:
int operator++(int& a, int)
{
int temp = a;
a = a + 1;
return temp;
}

你这样理解两个++运算,就OK了!~

C语言中,它是运算符,不支持引用,所以大多数的编译器,就不认为是左值。。个别编译器会让你通过

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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