当多个指针同时指向同一个地址,那么这些指针都是这个地址的引用,引用就相当于本身了,所以会引起改变。举一个链表的例子应该可以帮助理解。 平时我们操作链表的时候,通常把第一个节点head赋值给一个临时指针temp,如果通过临时指针temp来改变下一个节点,比如说temp直接指向链表的第三个节点,那么head的下一个节点是原链表的第二个节点还是第三个节点呢?答案是第三个。
#include <iostream>
using namespace std;
struct Node
{
int data;
Node* next;
//
Node(int x) :data(x), next(NULL){}
};
int main()
{
Node* a = new Node(1);
Node* b = new Node(2);
Node* c = new Node(3);
Node* d = new Node(4);
//将指针a赋值给d,a和d指向同一个地址,
//a或者d对地址中元素的操作会引起对方的变化。
cout << d->data << " " << a->data << endl;// 4//1
d = a;
d->data = 333;
cout << d->data << " " << a->data << endl;//333//333
//改变a的地址不会引起d的变化
a = c;
cout << d->data << " " << a->data << endl;//333//3
cout << c->data << endl;//3
//改变a的地址不会引起d的变化
a->next = new Node(888);
cout << c->next->data << endl;//888
a = a->next;
cout << d->data << " " << a->data << endl;//333//888
cout << c->data << endl;//3
}