指针变量的引用在声明的时候,主要要在“*”之后添加“&”,例如:
int *& a =b;
下面 引用一个例子:
void main(){
int arr[]={1,2,3};
int *p=arr;
int *&r=p;
cout<<"r="<<r<<",p="<<p<<endl;
cout<<"&r="<<&r<<",&p="<<&p<<endl;
cout<<"r->"<<*r<<",p->"<<*p<<endl;
cout<<endl;
int a_int=9;
p=&a_int;//ok.
cout<<"r="<<r<<",p="<<p<<endl;
cout<<"&r="<<&r<<",&p="<<&p<<endl;
cout<<"r->"<<*r<<",p->"<<*p<<endl;
}
输出结果:
r=0012FF74,p=0012FF74
&r=0012FF70,&p=0012FF70
r->1,p->1
r=0012FF68,p=0012FF68
&r=0012FF70,&p=0012FF70
r->9,p->9
Press any key to continue
从上面这个结果可以看出来,指针引用变量r和指针变量p指向共同的内存区域,当通过指针变量p修改指向的位置是,引用指针变量也随即修改。但是通过输出两个指针变量的地址可以看到,两个指针变量所在的地址并没有发生改变,改变了的只是指针变量中存储的值,即保存的地址。
下面我再引用一个关于结构体指针的引用的例子:
#include <iostream>
using namespace std;
typedef struct stu{
int num;
}stu;
void Initlize(stu* &s)
{
stu *st=(stu*)malloc(sizeof(stu));
s=st;
st->num=100;
}
void ShowNum(stu* s)
{
cout<<"num:"<<s->num<<endl;
}
void main()
{
stu *s=NULL;
Initlize(s);
ShowNum(s);
}
通过上面的例子可以看到,虽然结构体指针s在main函数中设置为NULL,但是,经过Initlize函数之后,s的值发生了变化。究其原因,就是因为在Initlize函数中,我们通过结构体指针变量的引用,使s指向了一片新开辟的区域,而对这片区域的一切修改,都可以返会到main函数中,所以,通过ShowNum方法,可以查看s指向结构体中的内容了。
这就是用变量作为函数参数并返回改变量的方法——使用引用。