我有下面的代码:

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;
}

我期望输出为:



ptr地址处的值现在应等于ptr2地址处的值,因为ptr1ptr2实际上指向节点的数据部分。(如我通过打印地址值所看到的)

但输出是:



我希望得到我的输出,因为当我打印*(ptr2)时(使用printf而不是coutcout显示错误),我的输出为:



请有人解释发生了什么。*ptr1 = *ptr2是做什么的?

最佳答案

*(ptr1) = *(ptr2);

在这种情况下等于:
ptr1->data = ptr2->data
ptr1->next = ptr2->next

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

您从此出发:
[ptr1]==>[ptr2]==>[ptr3]

对此:
[ptr2]==>[ptr3]
[ptr1]==>[ptr3]

关于c++ - 我想知道以下指针等于什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56443417/

10-12 18:05