一、引用的定义
在C++中,引用是一个别名,它为一个已经存在的变量提供了一个别名。引用在定义时必须初始化,并且一旦初始化之后就不能再指向其他变量。引用可以被视为变量的另一个名字,通过引用可以直接操作原始变量。
引用的本质在c++内部实现是一个指针常量。但是所有的指针操作编译器都帮我们做了。
例如:int &ref = a; <==> int *const ref = &a;
引用变量ref与a共用同一块内存空间。
二、引用基本操作
代码示例:
int a = 10;
//引用:数据类型 &别名 = 原名;
// int &b = a;
int &b = a;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
b = 100;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
//引用初始化后,不可以改变
//赋值操作,不是更改引用
int c = 20;
b = c;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
运行结果:
a = 10
b = 10
a = 100
b = 100
a = 20
b = 20
c = 20
三、引用函数操作
//引用函数操作
//1、值传递
void mySwap01(int a,int b)//局部变量在当前函数运行结束后,局部变量去除
{
int temp = a;
a = b;
b = temp;
}
//2、地址传递
void mySwap02(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//3、引用传递
void mySwap03(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
mySwap01(a,b);
cout<<"值传递a:"<<a<<endl;
cout<<"值传递b:"<<b<<endl;
mySwap02(&a,&b);
cout<<"地址传递a:"<<a<<endl;
cout<<"地址传递b:"<<b<<endl;
mySwap03(a,b);
cout<<"引用传递a:"<<a<<endl;
cout<<"引用传递b:"<<b<<endl;
return 0;
}
普通的值传递函数因为局部函数中的局部变量只能在包含它的函数内部被调用。所以无法修改函数外的变量数值。
引用可以被用作函数的参数,通过引用参数可以在函数内部直接修改原始变量的值,而不是对副本进行操作。(可以理解为对原始变量进行直接处理)这样可以避免数据的复制,提高程序的效率。
简单来说,引用函数的形参可以直接当成实参来操作。
通过引用参数产生的效果同按地址传递是一样的,引用的语法更清楚简单。
引用是可以作为函数的返回值存在的,但是不能返回局部变量引用。
四、常数引用
作用:常量引用主要用来修饰形参,防止误操作 在函数形参列表中,可以加const修饰形参,防止形参改变实参
函数中使用常数引用,当修改形参时程序会报错。报错信息如下:
总结:C++推荐用引用技术,因为语法方便。