概念
定义:引用是为已存在的变量取别名,共用同一块内存空间
用法:类型 & 引用变量名 = 引用实体
int b = 1;
int& a = b; //a就是b 同名
int c = 3;
a = c;
cout << b; //b==3
引用是用指针实现的
特点
- 引用实体和引用类型必须是同种类型
- 引用在定义时必须初始化 且不能初始化为空
- 不能改变引用关系
用法
const与引用
被const修饰的变量其引用也必须被const修饰
const int a = 1;
int& b = a; //报错 需要const
const int& c = a;//表示不能通过c修改
参数与引用
作为函数参数 在函数内部能直接对原数据进行修改 提高函数调用和运行效率
区别于值传递 值传递机制”形参=实参“ 产生的实参的副本
而将引用作为函数参数,不用经过值传递机制,省去了传值和生成副本的时间和空间消耗,提升效率
void swap(int &a,int &b) {
int c = a;
a = b;
b = c;
}
int main() {
int a = 1, b = 2;
swap(a,b);
cout << a << " " << b << endl;//a==2 b==1
}
返回值与引用
返回值为引用的好处:在内存中不产生被返回值的副本 提高函数调用和运行效率
int& fun(int& a) { //返回的仍是原来的a
a = 2;
return a;
}
int main() {
int a = 1;
fun(a);
cout << a << endl; //a==2
}
引用与指针的区别
- 引用定义时必须初始化,且不能为NULL,指针可以
- 引用不能改变引用关系,指针可以
- 引用只是变量的别名,不需要分配空间,而指针是一个实体,需要分配内存空间
- 指针用sizeof计算大小结果不同,32位内存下是4字节,64位内存下是8字节,引用sizeof结果为类型大小
- 有多级指针,没有多级引用
- 引用++和指针++含义不同,指针自增是地址上的计算,引用自增单纯对数据+1