#include<iostream>
#include<string>
using namespace std;
void change(int * &a){
delete a;
a=NULL;
}
int main(int argc, char **argv) {
int *a = new int;
*a=5;
cout<<a<<endl;
cout<<*a<<endl;
change(a);
if(a){
cout<<a<<endl;
cout<<*a<<endl;
}
}
结果:
0x910010 //此处为地址,不同电脑可以会存在差异
5
上述程序中,值得注意的是 void change函数中形参采用的是指针的引用,这么做的意义是可以修改主函数中指针变量a的本身,delete释放的是指针变量指向的内存而不是指针变量本身的内存。调用change()后,a的地址变为null,a指向内存的值被设为0;
注:不能定义指向引用的指针(因为引用不是对象,没有实际的地址)。那么,能否定义指针的引用呢?答案是肯定的,因为指针本身就是一个对象。即然是对象,就能定义一个引用邦定该对象。
如果void change函数中不使用引用而直接使用指针,
#include<iostream>
#include<string>
using namespace std;
void change(int * a){
delete a;
a=NULL;
}
int main(int argc, char **argv) {
int *a = new int;
*a=5;
cout<<a<<endl;
cout<<*a<<endl;
change(a);
if(a){
cout<<a<<endl;
cout<<*a<<endl;
}
}
结果如下:
0x927010
5
0x927010
0