一、引用的基本使用 作用:给变量取别名 语法: 数据类型 别名 = 原名 二、引用的注意事项 1、引用必须初始化 2、引用在初始化后,不可以改变 3、引用必须引一块合法的内存空间 示
一、引用的基本使用
作用:给变量取别名
语法:数据类型 &别名 = 原名
二、引用的注意事项
1、引用必须初始化
2、引用在初始化后,不可以改变
3、引用必须引一块合法的内存空间
示例:
三、引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修改实参
优点:可以简化指针修改实参
示例:
//值传递
void swap1(int a,int b) {
int tem = a;
a = b;
b = tem;
}
//地址传递
void swap2(int* a, int* b) {
int tem = *a;
*a = *b;
*b = tem;
}
//引用传递
void swap3(int& a, int& b) {
int tem = a;
a = b;
b = tem;
}
int main() {
int a = 10;
int b = 20;
swap1(a,b);
cout << "值传递:a = " << a << endl;
cout << "值传递:b = " << b << endl;
swap2(&a, &b);
cout << "地址传递:a = " << a << endl;
cout << "地址传递:b = " << b << endl;
//地址传递会改后,需要还原
a = 10;
b = 20;
swap3(a, b);
cout << "引用传递:a = " << a << endl;
cout << "引用传递:b = " << b << endl;
system("pause");
return 0;
}
总结,我们可以这样理解:
1、值传递:将实参拷贝一份给形参
2、地址传递:将实参的地址传给形参
3、引用传递:直接把实参本体,取个名字传给形参
四、引用做函数返回值
作用:引用时可以作为函数的返回值存在
注意:
1、不要返回局部变量引用(局部变量在栈区,调用结束会销毁)
说明:局部变量的引用作为返回值时,可能存在可以使用几次的情况,这是因为编译器会对局部变量进行几次保留,尽可能避免我们因此产生错误。
2、对于引用作为返回值的函数,可以把函数调用作为左值,对其进行赋值
结果显示,这种方法是可行的!!!
解释:
1、函数在调用后,返回一个引用变量,
2、对引用变量重新赋值为100
五、引用的本质
本质:引用的本质在c++内部实现是一个指针常量(指针是个常量)
示例:
总结:
1、对于:int& ref = a;
引用的初始化,自动转换为 int* const ref = &a;
2、对于:ref = 20;
引用的调用,自动转换为 *ref = 20;
3、c++推荐用引用计数,因为语法方便,引用的本质是指针常量,但是所有的指针操作编译器都帮我们做了
六、常量引用
作用:常量引用主要用来修饰形参,防止误操作,修改值
解释:在函数形参列表中,可以使用const修饰形参,防止形参改变实参
语法:const 数据类型& 引用名
示例:
喜欢就点赞收藏吧~