一 指向同一地址的指针
pointer *p1; pointer *p2; p2=p1; ? p2=p1是让p2和指向同一内存空间,但如果后续p1地址变了,p2的地址不会随之改变。是浅拷贝 总结:不要让两个指向同一地址的指针同时操作这个内存空间,会出错
例1
BstNode* p1=tree->GetRoot();
BstNode* p2 = p1;
cout << p1->data;
p1= new BstNode(1);
cout << p1->data;
cout << p2->data<<endl;
例2
BstNode* p1=tree->GetRoot();
BstNode* p2 = p1;
p1= new BstNode(1);
p2 = p1;
delete p1;
cout << p2->data<<endl;
cout << p1->data;
二 指针的引用
pointer *p1; pointer *p2; p2=&p1; p2和p1实际上相同,p2是p1的别名。是深拷贝
例1
BstNode* p1=tree->GetRoot();
BstNode* &p2 = p1;
p1= new BstNode(1);
cout << p1->data;
cout << p2->data<<endl;
例2
例2
BstNode* p1=tree->GetRoot();
BstNode* p2 = p1;
p1= new BstNode(1);
p2 = p1;
delete p1;
cout << p2->data<<endl;
cout << p1->data;
三、应用
void BST_Insert(BstNode* &Node,BstNode* parent, int data) ①在传参的过程中如果向保留函数内部对于参数的修改则应使用深拷贝&,比如对树进行插入、删除结点等 ②如果这个变量后续不会再被用到则使用浅拷贝"="
|