引用传递(c++基础知识)
本文仅仅浅浅讨论引用,数据结构代码中有涉及到,给考研c++基础薄弱的伙伴们一点启发
一、引用的概念:
引用就是某一变量(目标)的一个别名,也就是说,它是某个已存在变量的另一个名字。对引用的操作与对变量名直接操作完全一样。
他们指向同一块内存空间。
引用的初始化:类型标识符 &引用名=目标变量名;
上述格式中,“&”,并不是取地址操作符,而是起标识作用,标识所定义的标识符是一个引用。引用声明完成以后相当于目标变量有两个名称.例:
int a = 10;
int &b = a;
可以看出修改p的值直接就是修改了a的值。在内存中就是这样体现的。
定义引用注意事项:
1、引用在定义时必须初始化,如int &b;是错误的。
2、引用在初始化时只能绑定左值不能绑定常量值。
int &p = 10;//错误写法
3、引用一旦初始化,其值就不能再更改,即不能再做别的变量的引用
4、数组不能定义引用,因为数组是一组数据,无法定义其别名。
5、 引用 vs 指针
三个主要的不同:
1.不存在空引用。引用必须连接到一块合法的内存。
2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3.引用必须在创建时被初始化。指针可以在任何时间被初始化。
引用应用
1、C++增加引用的类型,主要的应用就是把它作为函数的参数,以扩充函数传递数据的功能,引用作函数参数时是区别于值传递与址传递的引用传递。
值传递缺点是需要再内存中在开辟一块空间复制实参,并且还不能够改变主函数中实参的值,也就是值传递中形参只是实参的一份临时拷贝
传地址调用就是可以节省空间,省去复制实参,是直接通过地址找到这部分空间,并通过指针进行对实参的直接使用和修改的
引用传递:利用引用传递可以克服 值传递与址传递中容易出现错误且程序的可读性差的缺点。直接操作变量,简单高效可读性又好
1、如果这里我使用值传递就会导致无法直接交换a,b
2、如果使用地址传递,就需要在变量p1,p2前面加上星号代码可读性差
3、使用引用,直接在相应的内存空间进行交换,可以规避这些缺点
我们来看一道数据结构链表的代码,使用引用传递的单链表
这里的引用传递就直接可以代表指针空间,也就是头指针的别名,对L在初始化函数进行操作也就相当于对头指针进行操作了