请教一个关于左值的问题

winsunII 2003-09-29 04:57:51
int* q = &(x++); //为什么说x++不是一个左值,它不是存储在x里的吗?
...全文
43 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinhao 2003-09-29
  • 打赏
  • 举报
回复
int main()
{
int x=10;
int* q =&(++x);
}
用Dev-C++顺利通过编译
winsunII 2003-09-29
  • 打赏
  • 举报
回复
看来我的找个gcc编译一下
TianGuangZao 2003-09-29
  • 打赏
  • 举报
回复
不行。
++i 是左值没错,不过通不过也没办法。
winsunII 2003-09-29
  • 打赏
  • 举报
回复
To: TianGuangZao(天光早)
int *q=&(++x);和int *q=&(x++); 在VC下可通过,在gcc下通不过吗?
winsunII 2003-09-29
  • 打赏
  • 举报
回复
谢谢 Jinhao(辣子鸡丁) ,让人豁然开朗 :)
TianGuangZao 2003-09-29
  • 打赏
  • 举报
回复
不管是 int *q=&(++x); 还是 int *q=&(x++);
gcc 下都通不过,同一个提示:
error: invalid lvalue in unary `&'

x 是什么都没告诉,如果 x 是 int 类型
int x;
int* q = &x;
x++;

不就可以了吗?
Jinhao 2003-09-29
  • 打赏
  • 举报
回复
也许你们不懂的在这里“x++返回一个临时对象”

x++可以看承下面的函数
int addself1(int &x)
{ int a=x;
x=x+1;
return a;
}
所以你用&取回的x++地址其实是那个临时对象的地址,但是临时对象在函数结束时就被销毁了,故这样取得的地址是无意义的

++i 可看先下面的函数
int& addself2(int& x)
{ x=x+1;
return x;
}
这样,函数返回的就是x本身自己,所以你用&取得的地址就是一个有效的地址
RainWindy 2003-09-29
  • 打赏
  • 举报
回复
我也不懂,但可以这样
x++;
int *q = &x;
这样看起来又没有歧义,多好。
Jinhao 2003-09-29
  • 打赏
  • 举报
回复
x++返回一个临时对象
操作符&,去获取这个临时对象的地址
所以不允许

临时对象就是左值

可以改成这样
int *q=&(++x);
aflyinghorse 2003-09-29
  • 打赏
  • 举报
回复
x++不是一个左值
++x才是一个左值

x++x相当于这样:(tmp = x, ++x, tmp)
sky8144843 2003-09-29
  • 打赏
  • 举报
回复
up
winsunII 2003-09-29
  • 打赏
  • 举报
回复
我编译这条语句,编译器报错,error C2102: '&' requires l-value
但int* q = &++x;是正确的,为什么?
tonyzhengjq 2003-09-29
  • 打赏
  • 举报
回复
没听懂你的意思!

69,336

社区成员

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

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