- 是
*&x
总是等于x
?如果不是,它什么时候不是? - 是
&*x
总是等于x
?如果不是,它什么时候不是?
我的猜测是,(1)永远是真实的,但(2)并不总是正确的,因为x
可能并不总是一个指针,所以我们不能说出*x
。C++:地址解引用和取消引用地址的地址
*&x
总是等于x
?如果不是,它什么时候不是?&*x
总是等于x
?如果不是,它什么时候不是?我的猜测是,(1)永远是真实的,但(2)并不总是正确的,因为x
可能并不总是一个指针,所以我们不能说出*x
。C++:地址解引用和取消引用地址的地址
在你的第一个例子中,你得到地址x
(它给你一个指向x
的指针),然后你将该指针重新设置回x
。所以是啊,应该是这样,除非x
是一个超载运营商*
或&
的类。
你的第二个例子只适用于pointers
或classes
已经超载了*
运算符。
如果它与原始指针一起使用,那么它应该是相同的。您尊重x
,它将返回对存储在x
中的值的引用,然后获取存储该值的地址,当然这是x
。
如果它与pointer
到class
一起使用,并且class
已经超载了&
运算符,则它不一定是。
class A
{
public:
int v;
//int operator*() { return v; }
int * operator&() { return &v; }
};
A* w = new A();
int* ptr = &*w;
是和否,因为*&x
意味着它是参考指针意义
int v1 = 10; int *v2 = &v1; int *&v3 = v2; cout << *v3; *v2 = 11; cout << *v3;
会发出放10和11.While声明*&x
并不意味着获取v3地址的值。在这种情况下,v3是指向它的指针的地址。但是如果你使用* & x外部声明它会给你存储在v3地址的值。
当'x'是一个指针时,第二个似乎不是非法的,那么'&* x'就是'x'指向的变量的地址。 – marczoid
到查找操作符重载。 –
你的猜测是正确的(因为你指出 - 得到它,指出?:P)。 –
@CaitLANJenner否和否。请记住,运营商超载。 – juanchopanza