c++中引用与指针的区别

引用:

引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。


区分&的作用:

int *p=&a;// &此处是取地址符

a & b          //按位与运算(相同位的两个数字都为1,则为1;若有一个不为1,则为0)

a&&b        //逻辑与运算

int  &a=b;//引用(a为b的别名)

引用的声明方法:类型标识符 &引用名=目标变量名;

说明:

1)b为目标原名称,a为目标引用名。类型标识符就是目标原名称的类型。

2)声明引用时,必须对其进行初始化。

3)声明一个引用,不是定义一个新变量,只是一个变量的别名,因此它不占存储单元,所以对对引用求地址就是对目标变量求地址。(&a=&b)

4)不能建立引用的数组,但是可以建立数组的引用。

int &a[3]={1,2,3};   //错误,试图声明一个引用数组。

原因:数组是一个元素的集合,而引用不是一个新变量,不占内存,没法给他分配空间,所以不能声明和定义引用数组。

数组的引用:例如

int b[3];  

int(&a)[3]=b;


引用的两个用途:作为函数参数以及从函数中返回左值

1)在c中,函数的参数不具备返回值得作用,一般用指针来实现返回值。但是引用可实现传递可变参数。

2)当大型对象被传递时,使用引用参数可是参数传递效率提高。因为引用并不产生对象的复制,使程序的时空复杂度都减小。

指针:

指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。

指针一般出现在比较近机器语言的语言,如汇编语言或C语言。面向对象语言如Java一般避免用指针,而是引用。


引用和指针的区别:

1)指针有空指针这一说法,它可以被重新复制,而引用没有空引用(null reference)这一说法,它总是指向最初的对象。

2)指针是一个实体,他有自己的地址空间,而引用只是一个别名,不占内存,没法给他分配空间。

3)“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

4)指针和引用的自增(++)运算意义不同。

5)指针是一个存放变量地址的变量,引用时一个变量的别名。当编译的的时候,引用和指针都被存入符号表。符号表一旦生成就不能被改变,但是,指针变量在符号表中存放的是指针变量的地址,而不是他指向的变量的地址,因此指针可以改变它指向的对象。但是,引用在符号表中对应的是目标对象的地址,因此引用对象不能改变。

相同点:

他们都是地址的概念。





























 
















猜你喜欢

转载自blog.csdn.net/qq_40340448/article/details/78323041