【问题标题】:Why does `&*(&*d)` return address of "c" instead of address of "b"?为什么`&*(&*d)`返回“c”的地址而不是“b”的地址?
【发布时间】:2011-02-02 08:18:53
【问题描述】:

我编写了一些代码,用于理解指针的概念/基础:

int a=1;
int *b=&a;
int **c = &b;
int ***d = &c;

cout << &*(&*d) << endl;

为什么&amp;*(&amp;*d)返回“c”地址而不是“b”地址?

我也试过&amp;*(&amp;*(&amp;*(&amp;*(&amp;*d))))之类的代码,但它保留了“c”的返回地址

【问题讨论】:

    标签: c++ pointers


    【解决方案1】:

    因为&amp;* 相互抵消。 * 取消引用 d,它给出了 c 的值。然后&amp;给出c的地址,或者d的值。

    【讨论】:

      【解决方案2】:

      &amp;* 相互抵消。如果你想取消引用一个指针,你只需要一个*。所以,试试**d

      【讨论】:

        【解决方案3】:

        简单规则:使用*访问/提供值,使用&amp;访问/提供地址。

        【讨论】:

          【解决方案4】:

          * 取消引用指针,并为您提供它指向的内容。 & 基本上是地址。

          当它们在同一点使用时,它们相互抵消,&amp;*d 相当于 d 如果要打印 c 的地址,则需要 *d,对于 b,您需要 **d,对于 a 中的数据,您需要 ***d

          【讨论】:

            【解决方案5】:

            如果x 是一个变量,那么&amp;*x 不完全等于x。前者是右值,后者是左值。另一方面,*&amp;x 始终与 x 相同,因为这两个表达式都是左值。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-09-29
              • 1970-01-01
              • 2013-08-20
              • 1970-01-01
              • 2021-04-01
              • 2020-01-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多