在C++中,引入了一个新的定义:引用,引用在C++中的使用频率很高,所以就来看一下什么是引用:
引用实际上和原来的变量本质上是一样的,并不是新定义了一个变量,而是给已有的变量取了一个别名,没有独立空间,它和被引用的对象共用一块内存空间。一个变量可以有多个引用。
注意:引用时要和被引用的对象类型相同。引用在定义时必须初始化,
而指针则不同:
指针也是一个变量,在32位操作系统下,它的大小是4个字节,它储存的是一个变量的地址,指向一个内存的存储单元,通过指针可以找到变量的位置,通过解引用的操作可以读取到其内容。
引用和指针的区别:
1.引用在创建时必须初始化,而指针则不用。
2.引用在初始化引用一个变量后,就不能再引用其他变量,而指针可以改变指向任何一个同类型的变量。
3.sizeof值不同,引用结果为其引用实体的大小,而在32位平台下,指针的大小为4个字节
4.有多级指针,而没有多级引用
5.引用比指针使用起来相对安全。
引用是C++中的,而指针在C语言中是很重要的一部分,因为两者之间都是地址的概念,所以有很多初学者会搞混。下面,就一起看看引用和指针:
因为引用相当于起了个别名,所以对b操作,就是对a的操作。所以a和b实际上就是一个变量。
在学习C++之前,我们学到了函数的传参和返回值2种方式:值传递和址传递。学习引用之后,引用也可以作为函数的传参和返回值来传递。下面就用简单的交换来看一下三者的区别:
1.值传递:因为函数体内的变量仅是一份临时拷贝,所以对其操作在函数掉用完后,栈销毁后并不能把操作之后的值传递出来,所以一般进行操作数时,要避免值传递。在下面的代码中,形参只是一份临时拷贝,不论做什么操作,都不会影响到实参,对其的操作不能达到真正的swap。
2.址传递:虽然能达到swap函数想要的,但址传递要开辟空间来存放实参的地址,对指针解引用就能对其真正的swap,在没有学习引用之前最好的解决方法就是穿址,但其效率低,所以在学习了引用之后就不在传地址了。
3.引用传递:在swap函数形参中,传递了引用,之前说到引用其实就是对一个变量起了一个别名,两者其实就是一份东西,所以对形参的操作就是对实参的操作,所以实现了swap。