一、引用的基本使用
引用:给变量起别名 数据类型 &别名=原名
#include <iostream> using namespace std; int main() { // 引用:给变量起别名 数据类型 &别名=原名 int a = 10; int &b = a; cout << "b=" << b << endl; cout << "a=" << a << endl; b = 100; cout << "b=" << b << endl; cout << "a=" << a << endl; cout << "&a=" << &a << endl; cout << "&b=" << &b << endl; return 0; }
b=10 a=10 b=100 a=100 &a=0x63fe14 &b=0x63fe14
二、引用的注意事项
1、引用必须初始化;
2、引用初始化后,不可以改变。
#include <iostream> using namespace std; int main() { int a = 10; // 1、引用必须初始化 //int &b; 错误,必须初始化 //2、引用初始化后,不可以改变。 int &b = a; int c = 10; b = c; cout << "a=" << a << endl; cout << "b=" << b << endl; cout << "c=" << c << endl; return 0; }
a=10 b=10 c=10
三、引用做函数参数
作用: 函数传参时,可以利用引用的技术让形参修饰实参;
优点:可以简化指针修改实参。
#include <iostream> using namespace std; //交换函数 //1、值传递 void mySwap01(int a, int b) { int tem = a; a = b; b = tem; } //2、地址传递 void mySwap02(int *a, int *b) { int tem = *a; *a = *b; *b = tem; } //3、引用传递 void mySwap03(int &a, int &b) { int tem = a; a = b; b = tem; } int main() { int a = 10; int b = 20; // mySwap01(a, b); //值传递,形参不能修饰,实参 // mySwap02(&a, &b); //地址传递,形参可以修饰,实参 mySwap03(a,b); cout << "a=" << a << endl; cout << "b=" << b << endl; return 0; }
a=20 b=10
四、引用做函数返回值
作用: 引用是可以作为函数的返回值存在的;
注意:不要返回局部变量引用;
用法: 函数调用作为左值。
#include <iostream> using namespace std; //引用做函数的返回值 //1、不要返回局部变量的引用 int &test01() { int a = 10; return a; } //2、函数的调用可以作为左值 int &test02() { static int a = 10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放 return a; } int main() { int &ref = test01(); // cout << ref << endl; //编译器优化 // cout << ref << endl; //发生错误 int &ref2 = test02(); cout << ref2 << endl; cout << ref2 << endl; // 函数的调用可以作为左值 test02() = 1000; cout << ref2 << endl; cout << ref2 << endl; return 0; }
10 10 1000 1000
五、引用的本质
本质:引用的本质在c++内部实现是一个指针常量
#include <iostream> using namespace std; //编译器自动转换为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=20; cout<<"a="<<a<<endl; cout<<"ref="<<ref<<endl; func(a); cout<<"a="<<a<<endl; cout<<"ref="<<ref<<endl; return 0; }
a=20 ref=20 a=100 ref=100
六、常量的引用
作用: 常量引用主要用来修饰形参,防止误操作;
在函数形参列表中,可以加const修饰形参防止形参改变实参;
#include <iostream> using namespace std; //打印数据 const防止修改 void showVaule(const int &val) { cout << val << endl; } int main() { // 常量引用 // 使用场景:用来修饰形参,防止误操作 int a = 10; //加上const后,编译器将代码修改 int tem=p10; const int & ref=temp; // const int &ref = 10; // ref=20; int b = 20; showVaule(b); cout << b << endl; return 0; }