作用:给变量起别名
语法:数据类型 &别名 = 原名
int main() {
int a = 10;
int &b = a;
cout << a << endl;
cout << b << endl;
b = 100;
cout << a << endl;
cout << b << endl;
return 0;
}
引用注意事项
- 引用必须初始化
- 引用在初始化后,不可以改变
int main() {
int a = 10;
int b = 20;
// int &c; 错误,引用必须初始化
int &c = a; // 一旦初始化后,就不可以更改
c = b; //这是赋值 *** 作,不是更改引用
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
// 值传递
void swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
// 地址传递
void swap2(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 引用传递
void swap3(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
swap1(a, b);
cout << a << endl;//10
cout << b << endl;//20
int c = 30;
int d = 40;
swap2(&c, &d);
cout << c << endl;//40
cout << d << endl;//30
int e = 50;
int f = 60;
swap3(e, f);
cout << e << endl;//60
cout << f << endl;//50
return 0;
}
引用做函数返回值
作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用作为左值
//引用做函数的返回值
//1.不要返回局部变量的引用
int &test1() {
int a = 10;//局部变量存放在四区中的栈区
return a;
}
//2.如果函数的返回值是引用,这个函数的调用可以作为左值
int &test2() {
static int a = 10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
return a;
}
int main() {
int &ref1 = test1();
cout << ref1 << endl;// 什么都没有
int &ref2 = test2();
cout << ref2 << endl;// 10
test2() = 100;
cout << ref2 << endl;// 100
return 0;
}
引用的本质
本质:引用的本质在c++内部实现是一个指针常量
// 发现是引用,转换为 int *const ref = &a;
void func(int &ref) {
ref = 100; // ref是引用,转换为 *ref = 100;
}
int main() {
int a = 10;
// 自动转换为 int *const ref = &a;指针常量是指针指向不可改,也说明为什么引用不可更改
int &ref = a;
ref = 20;// 内部发现 ref 是引用,自动帮我们转换为:*ref = 20;
cout << a << endl;//20
cout << ref << endl;//20
func(a);
cout << a << endl;//100
cout << ref << endl;//100
return 0;
}
常量引用
作用:常量引用主要用来修饰形参,防止误 *** 作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
// 引用使用的场景,通常用来修饰形参
void showValue(const int &v) {
// v = 100; 会报错,加 const 不能修改引用值,
// 如果不加const,可以修改引用值,但是实参也会被修改。
cout << v << endl;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)