引用和指针是c++的两种复合类型
一、引用
通过引用操作,引用和变量被绑定在一起,对引用的操作就是对变量的操作。
int a=0;
int &refA=a;
int &refB=refA;//这样定义引用也是可以的,refB也绑定到了a上
int &errA;//错误
- 引用必须被初始化。
- 引用不是对象,不能再被更改。
- 引用只能绑定在对象上,不能绑定在字面值常量上或表达式结果上。
二、指针
指针存放某个对象的地址
int *p1,*p2;
int a=0;
p1=&a;
通过使用解引用操作符来访问变量
int b=*p;
- 指针可以不被初始化,那么其值是不确定的。
- 指针是对象,可以对指针进行更改。
(一)空指针
空指针不指向任何对象,如果定义了一个指针但不知道指向何处,可以用下列方法定义空指针:
int *p=nullptr;//nullptr是一种特殊类型的字面值,可以被转换成任意其他的指针类型。
int *p=0;//将指针初始化为字面值0。
(二)void*指针
void*指针可以存放任意对象的地址,但是,不能直接操作其指向的对象,因为我们并不知道它指向的对象到底是什么类型,也就无法对知道对这个对象能执行什么操作。
int a=0;
void *pv=&a;
(三)指向指针的指针
int a=0;
int *p=&a;
int **pp=&p;
(四)指向指针的引用
int *&rp=p;//从右向左看,&rp是引用,*&rp是对指针的引用,int *&rp是对整型指针的引用,总之是个引用。
对rp的操作和对p的操作是一样的:
rp=&b;//p指向b
*rp=0;//对p指向的对象赋值0