一、引用(左值引用)
引用时为对象起了另外一个名字。
形式:&d是对变量d的引用。(d是变量名)
如:int ival=1024;
int &refVal=ival; //refValu指向ival(是ival的另一个名字)
int &refVal2; //报错:引用必须被初始化;
引用之后,引用名和变量名作用一样,可用来赋值及其他操作,只是用两个不同的名字。
二、指针
存放对象的地址,也是一个对象,允许赋值和拷贝。
形式:*d是指向d的指针。(d是变量)
指针存放对象的地址,要获取地址,要用取地址符(&)。
如:int ival=1024;
int *p=&ival;
double dval;
double *pd=&dval; //pd为dval的地址。
double *pd2=pd; //正确:pd2为指向dval的指针
利用指针访问对象
指针指向一个对象,用“解引用符”(*)来访问对象。
如:int ival=1024;
int *p=&ival;
(声明后赋值int *p; p=&ival;)
cout<<*p;
给接引用的结果赋值,也就是对指针指向的对象赋值。(即使用*p等同于使用ival)
如:*p=0;
cout<<*p; //输出0
*和&多重含义
int i=1024;
int &r=i;//&引用
int *p; //*指针
p=&i; //&取地址符
*p=i; //*解引用符
iny &r2=*p;///&声明的一部分,引用;*解引用符
指向指针的指针:
int i=999;
int *p=&i;
int **pp=&p;
int ***ppp=&pp;
对指针取地址;
指向指针的指针pp前必须有两个*;指向指针的指针的指针的指针ppp前要有三个*;
对指针的引用:
指针是一个对象,可以对其引用。
int i=999;
int *p=&i;
int *&r=p;//r是对指针p的引用
r=&i; //r引用了一个指针,r赋值&i就是令p指向i
*r=0; //将p的值置为空