1.引用的使用:
作用:给变量起别名。
语法:数据类型 + &别名 = 原名 (注:数据类型与原名类型一致)
int main()
{
int a = 10;
int& b = a;//a与b使用同一块内存
b = 20;
cout << a << endl;//20
return 0;
}
2.引用的注意事项:
(1)引用必须初始化。---错误:int &b;
(2)引用在初始化后不可更改。
int main()
{
int& b;//错误:未初始化
int a = 10;
int& c = a;
int d = 20;
c = d;//赋值操作,未更改引用对象,a=c=d=20
return 0;
}
3.引用作函数参数:
作用:函数传参时,可以用引用让形参影响实参(代替指针)。
例:交换:
void mySwap(int& a, int& b)
{
int ret = a;
a = b;
b = ret;
}
int main()
{
int a = 10;
int b = 20;
mySwap(a, b);
cout << a << endl;//20
cout << b << endl;//10
return 0;
}
4.引用作函数返回值:
用法:
int& test()
{
static int a = 10;//静态变量,存放在全局区,在程序结束后由系统释放
return a;
}
int main()
{
int& ref = test();
cout << ref << endl;//10
return 0;
}
注:1.不要返回局部变量的引用:
int& test01()
{
int a = 10;//局部变量
return a;//错误,返回局部变量
}
2.函数的调用可以作为左值:
int& test02()
{
static int a = 10;//静态变量,存放在全局区,在程序结束后由系统释放
return a;
}
int main()
{
int& ref = test02();
cout << ref << endl;//10
test02() = 1000;//作为左值修改a和ref的值
cout << ref << endl;//1000
return 0;
}
5.引用的本质:指针常量
引用的本质其实是一个指针常量。
如 int& ref = a;等价于int* const ref = &a;
其后的赋值等操作也自动解引用。
如 ref = 20; 等价于 *ref = 20;
既然为常量(const),也说明为什么引用在初始化后不可更改。
//发现是引用转换为int* const ref = &a;
void func(int& ref)
{
ref = 100;//自动转换为*ref = 100
}
int main()
{
int a = 10;
func(a);
cout << a << endl;//100
return 0;
}
6.常量引用:
使用:例:const int& ref = 10;
int main()
{
int a = 10;
const int& ref = 10;
//加上const之后,相当于编译器将代码改为
/*int tem = 10;
const int& ref = tem;*/
return 0;
}
通常用法:用 const 来修饰形参,防止误操作改变实参。
void showValue(const int& a)
{
a = 1000;//错误,加const后,不能修改a
cout << a << endl;
}
int main()
{
int a = 10;
showValue(a);
return 0;
}