浅谈对引用变量的理解

本篇随笔简单记录一下本蒟蒻对C++程序语言中引用变量的理解。

引用的概念

int a;
int b=a;

在上面的代码块里,\(a\)\(b\)的值相等。(额

但是\(a,b\)指向的并不是同一块内存空间,也就是,虽然\(a,b\)的值是相等的,但是其实他俩并不是同一个变量,因为他们的内存空间不一样。只是他们存储的值是一个值而已。

int a;
int &b=a;

在上面的代码块里,\(a,b\)的值相等。(额额额

但是\(a,b\)指向的是同一块内存空间了。这就是“引用”的概念,就是这个新变量\(b\)完全和\(a\)相同,只是相当于给\(a\)起了一个新名字,也可以理解为\(a\)多了个名字,\(b\)就是\(a\)的别名。

于是,代码int &b=a的意义就是声明\(b\)是一个整型变量的引用变量,其值被初始化为\(a\)

但是,引用变量在一个函数执行期间只能被唯一锁定,不能再作为其他变量的引用名。

即以下代码是错误的:

int a1,a2;
int &b=a1;
int &b=a2;

引用变量在函数参数中的应用

刚刚已经提到,引用变量只是被引用变量的一个“别名”,实际上,它们是共用一个内存地址的。所以,当我们把引用变量作为函数形参的时候,实际上,实参传给形参的是实参的地址,也就是说,实参和形参拥有相同的地址。如果形参改变了,实参也随之改变。

我们可以这样理解:当调用函数的时候,如果不用引用变量作为函数形参,那么函数相当于把两个实际参数复制了一遍传给形参。也就是形参占了两个新的内存地址。所以在函数执行过程中,实参的值不会被改变。

但如果使用了引用变量,实参的值就会被改变。理由在上面已经说过了。