一、什么是引用
引用,顾名思义是某一个变量或对象的别名,引用的类型必须和其所绑定的变量的类型相同,对引用的操作与对其所绑定的变量或对象的操作完全等价。
引用的优点:
- 在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。
- 用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。
- 在程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
二、引用的注意事项
- 引用定义时必须初始化,与某对象进行绑定,否则会编译报错
- 不能将已初始化的引用作为其他变量或对象的名字或别名
- 引用的底层实现是指针常量,所以在内存中占4或8字节个字节
- 凡是使用了引用变量的代码,都可以转换成使用指针常量的对应形式的代码,只不过书写形式上要繁琐一些。反过来,由于编译器对引用变量使用方式上的限制,使用指针常量能够实现的功能,却不一定能够用引用来实现
- 不能返回局部变量的引用。原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,其值也可能会变成随机值。
- 不能返回函数内部new分配的内存的引用,主要因为引用仅仅是变量的别名,是无法对目标变量进行free操作的,这样,将导致在函数体内分配的内存,无法释放,从而导致内存泄漏!
三、引用实际应用
1、数组的引用
语法:类型 (&引用名)[数组中元素数量]=数组名;
#include<iostream>
using namespace std;
int main(){
int a[3]={1,2,3};
int (&b)[3]=a;//对数组的引用
cout<<&a[0]<<" "<<&b[0]<<endl;
cout<<&a[1]<<" "<<&b[1]<<endl;
cout<<&a[2]<<" "<<&b[2]<<endl;
return 0;
}

2、指针的引用
语法:类型 *&引用名=指针名;
#include<iostream>
using namespace std;
int main(){
int a=10;
int *ptr=&a;
int *&new_ptr=ptr;
cout<<&ptr<<" "<<&new_ptr<<endl;
return 0;
}

3、数组的引用作为函数的参数
C++的数组类型是带有长度信息的,数组的引用作为函数的参数时必须指定数组的长度
#include<iostream>
using namespace std;
void func(int(&a)[5]){//数组引用作为函数的参数,必须指明数组的长度
//函数体
}
int main(){
int number[5]={0,1,2,3,4};
func(number);
return 0;
}
本文详细介绍了C++中的引用,包括它的定义、优点和注意事项。引用作为变量的别名,用于高效传递函数参数,提高代码可读性。文章还展示了引用在数组和指针操作中的应用,并强调了不能返回局部变量或动态内存分配的引用以避免问题。引用的底层实现类似指针常量,但使用上更为安全。
1091

被折叠的 条评论
为什么被折叠?



