C ++:解析和解除引用地址的地址

时间:2016-03-08 14:27:26

标签: c++ pointers reference

  1. *&x是否始终等于x?如果不是,什么时候不是?
  2. &*x是否始终等于x?如果不是,什么时候不是?
  3. 我的猜测是(1)总是正确的,但是(2)并不总是正确的,因为x可能并不总是指针,所以我们不能陈述*x

2 个答案:

答案 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)

  1. 是和否,因为*&x表示它是指向

    的指针

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

  2. 将给出放置10和11.虽然声明*&x并不意味着获得v3地址的值。 在此上下文中的v3是它等同的指针的地址。但如果您使用*&amp; x外部声明,它将为您提供存储在v3地址的值。

    1. 我相信第二是非法的,如果&amp;或者*没有超载