您的位置:首页 > 其它

一些关于指针的常见错误

2016-11-30 18:59 218 查看
#include<iostream>
using namespace std;

struct P
{
int a;
P *link;
};
struct Q
{
int m;
P * p;
};
int main()
{
P A,B;
A.a=1;
B.a=2;
P *p1= &A;
P *p2= &B;
p1->link=p2;
/************************建时不置空的错误!********************************/

//p2->link=NULL;
if(p2->link==NULL) cout<<"!!!";  //不输出

/************************删完不置空的错误!********************************/

delete p2;
//p1->link=NULL;
if(p1->link==NULL) cout<<"!!!";  //不输出

/************************不开空间就赋值的错误!********************************/
P *p3;
//p3=new P;
p3->a=3;                       //炸

/************************到底加不加引用?********************************/
P *p5=new P;
p5->a=3;
P *p4=p1;      // P * & p4=p1;
p4 = p5;
cout<<p1->a;   //是1 不是 3
/************************到底加不加引用?2********************************/
P *p5=new P;
p5->a=3;
P *p4=p1;      // P * & p4=p1;
p4->link= p5;
cout<<p1->link->a;   //这时没错
// p4确确实实指向了p1相同的空间,不传引用时只能改这片空间,而改不了p1! !!
/************************到底加不加引用?(较复杂例子)********************************/
P *p5=new P;
Q q1;
P * p4=q1.p;   //  P *&p4=q1.p;
p4=p5;
cout<<q1.p->a;  //炸

/************************到底加不加引用?(函数传参也一样) 略********************************/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: