引用
引用的基本使用
作用:给变量起别名
语法:
数据类型 &别名 = 原名
xxxxxxxxxx
using namespace std;
int main() {
//引用的基本语法
//数据类型 &别名 = 原名
int a = 100;
//创建引用
int& b = a;
cout << "a 的值为:" << a << endl;
cout << "b 的值为:" << b << endl;
system("pause");
return 0;
}
运行

引用的注意事项
-
引用必须初始化
-
引用在初始化后,不可以改变
xxxxxxxxxx
using namespace std;
int main() {
int a = 100;
//1、引用必须初始化
//int &b 错误,必须要初始化
int& b = a;
//引用在初始化后不可以改变
int c = 20;
//int &b = c; 错误,会提示多次初始化
b = c; //会进行赋值操作而不是改变引用
cout << "a 的值为:" << a << endl;
cout << "b 的值为:" << b << endl;
cout << "c 的值为:" << c << endl;
system("pause");
return 0;
}
运行

引用做函数参数
作用:函数传递时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修实例
x
using namespace std;
//交换函数
//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,b;
a = 10;
b = 20;
mySwap01(a, b); //值传递,形参不会修饰(修改)实参
cout << "mySwap01的函数交换后,a的值为:" << a << endl;
cout << "mySwap01的函数交换后,b的值为:" << b << '\n' << endl;
a = 10;
b = 20;
mySwap02(&a, &b); //地址传递。形参会修饰(修改)实参
cout << "mySwap02的函数交换后,a的值为:" << a << endl;
cout << "mySwap02的函数交换后,b的值为:" << b << '\n' << endl;
a = 10;
b = 20;
mySwap03(a, b); //引用传递,形参会修饰(修改)实参
cout << "mySwap03的函数交换后,a的值为:" << a << endl;
cout << "mySwap03的函数交换后,b的值为:" << b << '\n' << endl;
system("pause");
return 0;
}
运行

引用做函数返回值
作用:引用是可以作为函数的返回值存在
注意:不要返回局部变量引用
用法:函数调用作为左值
xxxxxxxxxx
using namespace std;
//引用做函数的返回值
//1、不要返回局部变量的引用
int& test05() {
int a = 10;
return a;
}
//2、函数的调用可以作为左值
int& test06() {
static int a = 10; //静态变量,存放在全局区,全局区上的数据存放在全局区
return a;
}
int main() {
int &a = test05();
cout << "test05返回的 a 值为:" << a << endl;
cout << "test05返回的 a 值为:" << a << '\n' << endl;
int& a2 = test06();
cout << "test06返回的 a2 值为:" << a2 << endl;
cout << "test06返回的 a2 值为:" << a2 << '\n' << endl;
//作为左值
test06() = 600;
cout << "test06函数作为左值,a2的值为:" << a2 << endl;
cout << "test06函数作为左值,a2的值为:" << a2 << '\n' << endl;
system("pause");
return 0;
}
运行

引用的本质
本质:引用的本质在C++内部实现是一个指针常量
xxxxxxxxxx
using namespace std;
void func(int & ref) {
ref = 100;
}
int main() {
int a = 10;
//自动转换为 int * const ref = &a;
//指针常量是指针指向不可改,也说明为什么引用不可更改
int& ref = a;
ref = 20; //内部发现ref是引用,自动帮我们转换为:*ref = 20;
cout << "a 的值为:" << a << endl;
cout << "ref 的值为:" << ref << endl;
func(ref);
cout << "func 函数后 a 的值为:" << a << endl;
cout << "func 函数后 ref 的值为:" << ref << endl;
system("pause");
return 0;
}
运行

常量引用
作用:常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加 const修饰形参,防止形参改变实参
xxxxxxxxxx
using namespace std;
void test06(const int &val) {
//val = 100 //因为 const 修饰形参,所以无法改变形参的数值
cout << "val = " << val << endl;
}
int main() {
//常量引用
//使用场景:用来修饰形参,防止误操作
//const int & ref = 10;
//加上 const 之后 编译器自动将代码修改为
//int temp = 10; const int & ref = temp;
//const int & ref = 10; 引用必须引一块合法的内存空间
//ref = 20; 加入 const 之后变为只读,不可以修改
int a = 100;
test06(a);
cout << "a = " << a << endl;
system("pause");
return 0;
}
运行
