我想知道以下指针等于什么?

kor*_*rra 2 c++ pointers

我有下面的代码:

struct node {
    int data;
    node* next;
};

node* ptr1 = new node;
node* ptr2 = new node;
node* ptr3 = new node;

ptr1->data = 1;
ptr1->next = ptr2;

ptr2->data = 2;
ptr2->next = ptr3;

ptr3->data = 3;
ptr3->next = NULL;

*(ptr1) = *(ptr2);

node* temp;
temp = ptr1;

while (temp != NULL)
{
    cout << temp->data << " ";
    temp = temp->next;
}
Run Code Online (Sandbox Code Playgroud)

我期望输出为:

2 2 3

即,在地址的值ptr应为现在等于值以地址ptr2ptr1ptr2实际上指向的节点的数据部分..(如我看到通过印刷的地址值)

但输出是:

2 3

我希望得到我的输出,因为当我打印时*(ptr2),(使用printfand not cout; cout显示错误),我得到的输出为:

2

请有人解释发生了什么。怎么*ptr1 = *ptr2办?

Dra*_*rax 6

*(ptr1) = *(ptr2);
Run Code Online (Sandbox Code Playgroud)

在这种情况下等于:

ptr1->data = ptr2->data
ptr1->next = ptr2->next
Run Code Online (Sandbox Code Playgroud)

那就是您的结构的所有成员都将被更改,因此您ptr1->next不再指向ptr2node而是直接指向ptr3,这就是为什么只打印2个值而不是3个的原因

您从此出发:

[ptr1]==>[ptr2]==>[ptr3]
Run Code Online (Sandbox Code Playgroud)

对此:

[ptr2]==>[ptr3]
[ptr1]==>[ptr3]
Run Code Online (Sandbox Code Playgroud)