给出两个变量:
int x
int* p
和这些表达:
*(&x+*p)+x
&p+x
*(&p-(int**)&x)+x
*(&x+*(p+7))
对于每个表达式,找出它是否有效,如果它是Rvalue表达式或Lvalue表达式以及它代表什么类型。
我认为第一个无效。
应该是int类型的R值,我是对吗?
其他人怎么样?谢谢你的帮助!
答案 0 :(得分:4)
我认为最好的回答方法是解释会发生什么,并提出一些问题"并将决定留给您。
*(&x+*p)+x
&p+x
*(&p-(int**)&x)+x
- 醇>
*(&x+*(p+7))
我认为第一个无效。
你为什么这么认为?这完全是关于指针算术的。
但是你到目前为止是正确的,因为访问可能是未定义的。但是这并没有改变任何关于资格的东西,如Lvalue或Rvalue。
请注意,*(a+b)
与a[b]
相同,因此可以写为(&x)[*p] + x
,i。即int + int
。是否可以为其分配任何内容?
应该是int类型的R值,我是对的吗?
不,你不是。它是pointer + integer
,结果是指针。
*(&p-(int**)&x)+x
这基本上是*(pointer-pointer) + integer
。由于pointer-pointer
是整数,因此无法解除引用,...
*(&x+*(p+7))
这是*(pointer + *(pointer+integer))
,所以*(pointer + integer)
。可以分配给?