【问题标题】:Pointers and references in linked lists链表中的指针和引用
【发布时间】:2020-11-27 06:42:46
【问题描述】:
struct node {
    int data;
    node* next;
};

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;

    node* nu = new node;
    std::cout << *&nu << std::endl;
}

问题:nu 是内存地址,指针真的只是内存地址,还是我在这里遗漏了什么。 *nu 有什么意义,这是地址中包含的对象吗,&amp;nu 给了我内存地址本身。如果nu 是一个整数,它会给我一个数字吗?非常感谢您的帮助。

【问题讨论】:

  • 这应该包含在任何介绍性文本中。也许尝试其中一种books
  • *&amp;nunu 相同。您正在获取nu 本身的地址(而不是它所拥有的node 的地址),然后取消引用以返回nu 本身。所以std::cout &lt;&lt; *&amp;nustd::cout &lt;&lt; nu 输出相同的东西。

标签: c++ list pointers


【解决方案1】:

&amp;nu 使用address-of 运算符获取指针的地址,从而得到指向指针的指针。然后,* 间接运算符获取新指针的内容,这是原始指针 nu 的值,也是您发送给 cout 的值。

【讨论】:

    【解决方案2】:

    是 nu 内存地址,指针真的只是内存地址还是我在这里遗漏了什么。

    nu 是一个指向node 的指针,这意味着nu“指向”一个内存位置(在这种情况下是在堆上),node 已经在其中构造了。内存位置是地址,所以是的nu 本质上是一个内存地址。如果你打印它,你会得到一个十六进制值——地址本身。

    *nu有什么意义,这是地址中包含的对象吗

    *nu(或一般*pointer)等语法转换为到达指针指向的位置。 *,称为dereference operator,在C++中用于获取指针后面的值。

    &nu 给了我内存地址本身。

    &amp; 是获取变量地址的方法。写&amp;nu表示要获取nu变量的地址。请注意,它不是 node 的地址,而是 nu 变量本身。这个变量也存在于内存中(在堆栈上),地址也是如此。

    如果 nu 是一个整数,它会给我一个数字吗?

    不,您也会得到地址。 &amp; 为您提供变量的地址,而不是值。使用指针可能会感觉很棘手,因为指针的值就是地址。

    *&不

    在这种情况下,您已经获得了nu 变量的地址 (&n) 并立即获得了它后面的值 (*&nu)。它等同于 nu,因为该值是堆上某处的 node 的地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2012-04-20
      相关资源
      最近更新 更多