一 指向同一地址的指针
pointer *p1;
pointer *p2;
p2=p1;
⭐ p2=p1是让p2和指向同一内存空间,但如果后续p1地址变了,p2的地址不会随之改变。是浅拷贝
总结:不要让两个指向同一地址的指针同时操作这个内存空间,会出错
例1
BstNode* p1=tree->GetRoot();//p1=null
BstNode* p2 = p1;//p2和p1指向同一地址空间 null
cout << p1->data;//地址为0153F308
p1= new BstNode(1);//为p1分配空间
cout << p1->data;//地址为01540DE8
cout << p2->data<<endl;//error 地址为0153F308 p2=null
例2
BstNode* p1=tree->GetRoot();//p1=null
BstNode* p2 = p1;//p2和p1指向同一地址空间 null
p1= new BstNode(1);//为p1分配空间
p2 = p1;//p1和p2指向同一地址空间 BstNode(1)
delete p1;
cout << p2->data<<endl;// p2->data=???? 但p2能访问
cout << p1->data;//error p1为空指针
二 指针的引用
pointer *p1;
pointer *p2;
p2=&p1;
p2和p1实际上相同,p2是p1的别名。是深拷贝
例1
BstNode* p1=tree->GetRoot();//p1=null
BstNode* &p2 = p1;//p2和p1指向同一地址空间 null
p1= new BstNode(1);//为p1分配空间
cout << p1->data;//地址为00F70C700
cout << p2->data<<endl;//地址为00F70C700
例2
例2
BstNode* p1=tree->GetRoot();//p1=null
BstNode* p2 = p1;//p2和p1指向同一地址空间 null
p1= new BstNode(1);//为p1分配空间
p2 = p1;//p1和p2指向同一地址空间 BstNode(1)
delete p1;
cout << p2->data<<endl;// error p2为空指针
cout << p1->data;//error p1为空指针
三、应用
void BST_Insert(BstNode* &Node,BstNode* parent, int data)
①对传进来的参数Node进行分类
- Node为nullptr 这时应该使用&符号,因为nullptr并不指向一确定空间,当修改函数内部的类时,外部的并不会修改。解决方法:return Node用于接受
- Node不为nullptr 随便都行