c++引用不是定义了新的对象,而是对一个已有的对象起了一个别名,如鲁迅和周树人的关系,鲁迅是周树人的笔名,两者是一个东西,只是名字不同,正确来讲,编译器不会为了引用变量再开空间,它和它引用的空间使用了同一块内存空间
使用格式:
类型& 引用变量名(对象名)=引用实体
int a=10;//定义实体a
int &b=a;//给实体起别名b
ps:引用类型和实体必须要是同一类型
引用的特性:
1.引用在定义时必须初始化,这点不同于指针,因为指针可以不赋初值
2.一个变量可以有多个引用,也可以给引用起引用,但它们指向的是同一个实体
3.引用一旦初始化,就不能更改实体对象,这点不同于指针,指针可以更改指向的空间,但引用不可以
引用实际就是给实体对象起别名,如定义 int a = 10;此时系统开辟了一片空间,里面存储了10,a是它的名字,定义int& b = a,就是给这片空间又起了一个小名。
1.在c++中我们可以给常量起别名,方式和给变量起别名一样,整数在c++中默认类型为int ,浮点数为double
2.引用时别名的权限不能放大,只能缩小或平移
//权限放大
//vs2019编译器会报错,权限大于了实体
int& a=10;//错误的给常量起别名
const int b=10;//定义常变量
int &c=b;
//权限平移
//编译器不会报错
const int& a=10
const int b=10;
const int&c=b;
//权限的缩小
编译器不会报错
int a=10;
const int& b=a;
1.引用做参数,以往用函数我们实现swap()一般都要使用指针实现传址传参,但c++的引用可以方便的解决这个问题
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
2.引用做返回值
int& Count()
{
static int n = 0;
n++;
// ...
return n;
}
在函数中,引用不管是做参数或返回值效率一般都会更高,例如
现在有函数实参为一个有10000个节点的链表,那么函数形参需要拷贝这10000个节点,这样会浪费大量空间,这个时候,参数使用引用,就不需要拷贝那么多节点,实参和形参都指向一片地点