我有下面的代码:
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应为现在等于值以地址ptr2为ptr1和ptr2实际上指向的节点的数据部分..(如我看到通过印刷的地址值)
但输出是:
2 3
我希望得到我的输出,因为当我打印时*(ptr2),(使用printfand not cout; cout显示错误),我得到的输出为:
2
请有人解释发生了什么。怎么*ptr1 = *ptr2办?
*(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)