【问题标题】:How pointer reference works in C++?指针引用在 C++ 中如何工作?
【发布时间】:2022-01-11 00:43:21
【问题描述】:

我有 3 个指针:

Node* head;
Node* temp=head;
Node* p=new Node(2);

现在我分配:

temp->next=p

下一个头也会变吗?

head->next=?

【问题讨论】:

  • head 中的next 不会不会在我们写temp->next=p; 时被更改。它可以改变,但为此你必须告诉我们更多关于你的数据结构实际上是什么样子的。所以真正的答案是,“它可以/不能根据你拥有的结构而改变”。如果有人告诉你,是或否,100% 保证他/她会撒谎,因为问题不完整,因为它没有提供有关 Node 外观的任何信息。
  • 是的,如果head 实际指向某个分配的内存,temp 将指向同一个内存。
  • 如果head 指向Node 对象,temp 将指向同一个Node 对象。通过任一指针修改该对象都会修改该对象。
  • @JasonLiam 我不同意你的论点。无论结构如何,headtemp 都指向同一个内存。 head->nexttemp->next 是同一个东西,所以对 temp->next 的任何分配都会改变 head->temp。 100% 保证。
  • 您应该搜索的关键字是aliasing

标签: c++ pointers linked-list


【解决方案1】:

是的,如果head 实际上指向某个分配的内存,temp 将指向同一个内存。

例子:

#include <iostream>

struct Node {
    Node(int X) : x(X) {}
    int x;
    Node* next;
};

int main() {
    Node* head = new Node(1);

    Node* temp = head;                     // temp points to the same memory as head

    Node* p = new Node(2);
    temp->next = p;                        // head->next is the same as temp->next

    std::cout << head->next->x << '\n'     // prints 2

    delete head;
    delete p;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2014-08-25
    相关资源
    最近更新 更多