使用指针要小心

来源:互联网 发布:公司记账软件免费版 编辑:程序博客网 时间:2024/04/27 22:50

使用指针一定要小心,下面记录了自己犯的一个错误。

#include <iostream>using namespace std;void changePoint1(int *&p);void changePoint2(int **p);void main(){int a = 10;cout<<"变量a的地址:       "<<&a<<endl;cout<<endl;int *zyP = &a;cout<<"指针zyP的地址:    "<<&zyP<<endl;cout<<"指针zyP的内容:    "<<zyP<<endl;cout<<"指针zyP所指对象:  "<<*zyP<<endl;cout<<endl;cout<<"使用函数changePoint1(int *&p)"<<endl;changePoint1(zyP);cout<<"指针zyP的地址:    "<<&zyP<<endl;cout<<"指针zyP的内容:    "<<zyP<<endl;cout<<"指针zyP所指对象:  "<<*zyP<<endl;cout<<"指针zyP所指对象:  "<<*zyP<<endl;cout<<endl;cout<<endl;cout<<"---------------------------"<<endl;int *yyP = &a;cout<<"指针yyP的地址:      "<<&yyP<<endl;cout<<"指针yyP的内容:      "<<yyP<<endl;cout<<"指针yyP所指对象:  "<<*yyP<<endl;cout<<endl;cout<<"使用函数changePoint2(int **p)"<<endl;changePoint2(&yyP);cout<<"指针P的地址:      "<<&yyP<<endl;cout<<"指针P的内容:      "<<yyP<<endl;cout<<"指针yyP所指对象:  "<<*yyP<<endl;cout<<"指针yyP所指对象:  "<<*yyP<<endl;}void changePoint1(int *&p){int i = 20;int j = 30;cout<<"xxxxxxxxxx         "<<&i<<endl;cout<<"xxxxxxxxxx         "<<&j<<endl;p = &i;}void changePoint2(int **p){int i = 20;int j = 30;cout<<"xxxxxxxxxx         "<<&i<<endl;cout<<"xxxxxxxxxx         "<<&j<<endl;*p = &j;}

一定不要用将局部变量的地址赋给全局指针

函数changePoint1(int *&p)和changePoint2(int **p)中的局部变量int i,j的地址是一样的(vs2010编译),所以造成结果的混乱,修改指针的一定要小心。

0 0