C++学习笔记之引用
https://www.runoob.com/cplusplus/cpp-references.html
引用变量是一个别名,它是已存在变量的另一个名字
一旦把引用初始化为某个变量,可以使用该引用名称或变量名称来指向变量
1、引用vs指针
引用和指针之间有一些相似,也有一定不同:
①不存在空引用,引用必须连接到一块合法的内存
②一旦引用被初始化为一个对象,就能不能被指向另一个对象,而指针可以在任何时候指向另一对象
③引用必须在创建时初始化,指针可以在任何时间初始化
还是回到引用最初的特征——“别名”,如果需要给一个人起个绰号,那么这个人首先要存在,那么引用自然不会有引用,而且别名和对象自身指向的其实是同一个东西,就比如“香帅”和楚留香其实是同一个人,这样理解是否更加形象一些呢?
而指针则是更加灵活,不像引用与变量深度绑定,更偏向于工具,是内存操作的媒介
2、创建引用
引用是变量在内存中的第二标签,也可以理解为先前所说的变量的“绰号”
因此,在引用关联到变量上之后,通过原始的变量名或者是引用二者都可以访问该变量的内容,指向的是同一块内存
int value = 18;
int &r = value;
cout << &value << endl;
cout << &r << endl;
在声明完引用后,引用就可以和原始变量一样使用,使用&
可以将变量作为引用绑定到右值上
3、把引用作为参数
引用也可以作为函数的参数使用
void swap(int& x, int& y) {
int temp;
temp = x;
x = y;
y = temp;
}
int x = 10;
int y = 20;
swap(x, y); // 内存地址的交换
cout << x << endl;
cout << y << endl;
引用的实质是内存地址,尤其是对于一些内容进行修改时
经常会涉及值传递和引用传递的区别,值传递在函数结束后,并没有改变原来的值,因为参数只是被复制到函数中,操作的并不是原始的变量,因而调用结束后,没有修改传入的值;而引用则是修改的地址,因此最终改变的是地址,那么是确实修改了对应变量的内容
4、把引用作为返回值
通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护
通过函数返回引用的方式与返回指针的方式非常类似
但是,有一点需要注意,这里和返回指针类似,局部变量需要考虑生命周期,因此不能返回局部变量引用,因为函数调用结束会面临销毁,指向它的引用就会异常,上面框出的代码是有问题的
这里同样使用static
进行处理
int& updateValue(int value)
{
static int p = 10; // 此时是全局作用域
int& ref = p;
return ref;
}