引用本质:引用的本质在 c++ 内部实现是一个指针常量。
代码中 int& ref = a; 可以理解为 int* const ref = &a;(指针常量)。
指针常量:指针指向不可变(绑定 a 后,不能再指向其他变量),但可以通过指针修改所指的值。
引用:本质是变量的 “别名”,操作引用就是直接操作原变量。
#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是引用,自动帮我们转换为:*ref = 20;cout << "a:" << a << endl;cout << "ref:" << ref << endl;func(a);//调用函数func后cout << "a:" << a << endl;cout << "ref:" << ref << endl;return 0;
}
ref = 20;
表面是给引用 ref 赋值,实际会自动转换为 *ref = 20;(修改 a 的值)。此时 a 变为 20。
调用 func(a);
func 中 ref = 100;(参数 ref 是引用),同样转换为修改原变量 a 的值,a 变为 100。
初始 a = 10,经 ref = 20; 后 a 变 20,再经 func(a) 中 ref = 100;,最终 a 为 100。
代码验证: