给变量取别名。已经定义的变量的别名。
数据类型 &引用名=变量名;
int arr[3]={1,2,3};
int (&rarr)[3]=arr;
通过指针常量实现
int a=10;
int &aref=a;//====》int * const aref=&a;
aref=20;//;====》*aref=20;
作为函数的参数将引用变量运作参数函数将使用原始数据。而不是副本。
指针:用来保存地址
引用:给变量起别名
指针:可以不初始化
引用:一定要初始化
指针占的内存大小是4字节
引用:与变量占同一块内存空间
指针可以改变指向,但是不完全
引用不可以改变指向,一开始就已经确定好了给谁起别名
都可以实现按地址传递的作用
指针可以有多级,引用只能是一级
自增运算意义不同。
如下图所示,p++之后指向a后面的内存,r++相当于a++。
int a = 996;
int *p = &a;
int &r = a;
p++;
r++;
指针和引用作为函数参数时,指针需要检查是否为空,引用不需要
引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为NULL,所以不安全。
引用仅在声明时带有引用运算符“&”,以后像普通变量一样使用,不能再带“&”,其它场合使用的“&”都是地址操作符。