概念
引用的作用是给一个变量起别名
格式: type & 别名= 原名
引用必须初始化,在初始化后不能改变
int &b;b=a;错误
int& b = a; b=c;不是将b从a的别名变为c的别名
而是将c的值赋给a
int a = 10;
int& b = a;
b = 20;//用别名改数据,原名也会改变
//引用相当于一个指针
cout << a << endl;
a的值为20
引用作函数参数
简化指针修饰实参
函数交换数据 必须用地址传递
void myswap1(int& a, int& b)//用引用
{
int tep = a;
a = b;
b = tep;
}
void myswap2(int *a, int *b)//用指针
{
int tep = *a;
*a = *b;
*b = tep;
}
int main(void) {
//引用作函数参数
int a = 3, b = 5;
myswap1(a, b);
cout << a << endl << b;
}
指针和引用都能做到形参修饰实参,因为形参操作的是实参的内存
引用可以理解为指针常量:能修改地址的数据但是不能改变指向
引用作函数返回值
不要返回局部变量 的引用
局部变量存于栈区,离开局部,栈区内存释放
这样前两次输出10,test02()=1000后输出1000
因为函数返回的是a的引用,修改引用的值就相当于修改原数据的值
test02()=1000相当于a=1000
返回引用的函数可以作为左值
引用的本质
引用可以理解为指针常量:能修改地址的数据但是不能改变指向
int a=10; int &ref=a;编译器自动转化为 int * const ref=a;
ref=20; 发现是引用,自动转化为 *ref=20;
常量引用
这样打印出a=10
这样使用实参a的值也会被修改为1000
如果在形参前加入const val 就不能再被修改,防止因修改形参误该实参
const使其变为只读