我有下面的代码:
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
地址处的值,因为ptr1
和ptr2
实际上指向节点的数据部分。(如我通过打印地址值所看到的)但输出是:
我希望得到我的输出,因为当我打印
*(ptr2)
时(使用printf
而不是cout
; cout
显示错误),我的输出为:请有人解释发生了什么。
*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/