首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rvalue还是Lvalue?

Rvalue还是Lvalue?
EN

Stack Overflow用户
提问于 2014-06-06 14:16:29
回答 1查看 222关注 0票数 0

给定两个变量:

代码语言:javascript
复制
int x
int* p

以下这些表达方式:

  1. *(&x+*p)+x
  2. &p+x
  3. *(&p-(int**)&x)+x
  4. *(&x+*(p+7))

对于每个表达式,确定它是否有效,是否为Rvalue表达式或Lvalue表达式,以及它所代表的类型。

  1. 我认为第一个是无效的。
  2. 应该是整数类型的Rvalue,对吗?

其他人呢?谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 14:27:16

我认为最好的答案是解释发生了什么,并提出一些“建议的问题”,并把决定留给你。

  1. *(&x+*p)+x
  2. &p+x
  3. *(&p-(int**)&x)+x
  4. *(&x+*(p+7))

  1. 我认为第一个是无效的。

你为什么那么想?这都是关于指针算法的。

但您所处的位置非常正确,因为访问可能是未定义的。但这并没有改变作为Lvalue或Rvalue的资格。

请注意,*(a+b)a[b]是相同的,因此它可以编写为(&x)[*p] + x,即int + int。有可能给它分配任何东西吗?

  1. 应该是整数类型的Rvalue,对吗?

不,你不是。它是一个pointer + integer,结果指向一个指针。

  1. *(&p-(int**)&x)+x 这本质上是*(pointer-pointer) + integer。由于pointer-pointer是整数,因此不能取消引用,.
  2. *(&x+*(p+7)) 这是*(pointer + *(pointer+integer)),所以是*(pointer + integer)。能分配给他们吗?
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24083981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档