定义
引用是变量的别名
特点
- 寄生性
a)不能独立存在。出生时必须指定其对应的别名对象(作形参时通过实参隐式获取)
b)不占用独立地址。引用和其所代表的变量完全相同,建立引用,并不增加任何空间 - 专一性
一个引用名能且只能作为某一个变量的别名,不能二次"赋值" - 等效性
对引用的任何操作和对引用所代表的变量本身的操作完全等同 - 传递性
引用也可以作为引用
应用
作为函数参数:对形参(引用)的操作,完全等同于对实参的操作(引用的等效性)
区别
- 指针: 指针是实际独立存在的变量
a)指针没有寄生性,独立,且占用内存地址
b)指针没有专一性,可以多次赋值 - define: define只是字符的简单替换
define没有等效性,define只做字符替换,在值的内容上不作联系
其他注意事项:
- 不能建立void类型的引用,如 void &a=9;
任何实际存在的变量都属于非void类型,void含义是无类型,只是在语法上认为是一个类型 - 引用类型不是一个类型
int&* b=a;//错误,企图定义一个指针,该指针指向int型的引用
- 用const限制引用:
a) 不能通过引用的值改变原值,可以通过原值改变引用的值(保护形参不会改变)
b) 可以使用常量、表达式、不同类型的变量对引用进行初始化(没有const的情况下,引用只能作为和其类型相同的变量本身的引用)int i=5; const int &a=i; a=4; //错误 i=4; //正确,此时a的值也变为4
以上两种情况中,b都不是a的引用,而是a进行相应运算或者类型转换后的临时变量的引用,这个临时变量由系统自动生成,用户访问不到int a; int & b = a+3; //错误 const int & b = a+3; //正确 //========================== long a; int & b = a; //错误 const int & b = a; //正确
所以,a改变,b不受影响(b不是a的引用),b的值不能再改变了