2016-03-08 171 views
0
  1. *&x总是等于x?如果不是,它什么时候不是?
  2. &*x总是等于x?如果不是,它什么时候不是?

我的猜测是,(1)永远是真实的,但(2)并不总是正确的,因为x可能并不总是一个指针,所以我们不能说出*xC++:地址解引用和取消引用地址的地址

+3

到查找操作符重载。 –

+1

你的猜测是正确的(因为你指出 - 得到它,指出?:P)。 –

+0

@CaitLANJenner否和否。请记住,运营商超载。 – juanchopanza

回答

1

在你的第一个例子中,你得到地址x(它给你一个指向x的指针),然后你将该指针重新设置回x。所以是啊,应该是这样,除非x是一个超载运营商*&的类。

你的第二个例子只适用于pointersclasses已经超载了*运算符。

如果它与原始指针一起使用,那么它应该是相同的。您尊重x,它将返回对存储在x中的值的引用,然后获取存储该值的地址,当然这是x

如果它与pointerclass一起使用,并且class已经超载了&运算符,则它不一定是。

class A 
{ 
public: 
    int v; 
    //int operator*() { return v; } 
    int * operator&() { return &v; } 
}; 

A* w = new A(); 
int* ptr = &*w;  
0
  1. 是和否,因为*&x意味着它是参考指针意义

    int v1 = 10; int *v2 = &v1; int *&v3 = v2; cout << *v3; *v2 = 11; cout << *v3;

会发出放10和11.While声明*&x并不意味着获取v3地址的值。在这种情况下,v3是指向它的指针的地址。但是如果你使用* & x外部声明它会给你存储在v3地址的值。

  • 我相信第二是非法的,如果&或*没有过载
  • +0

    当'x'是一个指针时,第二个似乎不是非法的,那么'&* x'就是'x'指向的变量的地址。 – marczoid