*&x
是否始终等于x
?如果不是,什么时候不是?&*x
是否始终等于x
?如果不是,什么时候不是?我的猜测是(1)总是正确的,但是(2)并不总是正确的,因为x
可能并不总是指针,所以我们不能陈述*x
。
答案 0 :(得分:1)
在第一个示例中,您获得了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;
答案 1 :(得分:0)
是和否,因为*&x
表示它是指向
int v1 = 10;
int *v2 = &v1;
int *&v3 = v2;
cout << *v3;
*v2 = 11;
cout << *v3;
将给出放置10和11.虽然声明*&x
并不意味着获得v3地址的值。
在此上下文中的v3是它等同的指针的地址。但如果您使用*&amp; x外部声明,它将为您提供存储在v3地址的值。