指针与引用

来源:互联网 发布:编程之美 mobi 编辑:程序博客网 时间:2024/05/16 10:41

指针与引用的区别


定义

指针:指针是一个变量,这个变量存储的是一个地址,指向内存的一个存储单元;
引用:实质上跟原来的变量是同一个东西,相当于原来变量的一个别名。

e.g.int a = 1;int* b = &a;int& c = a;//指针b存储变量a的地址;int型引用c取变量a的地址,相当于变量a的别名//使用时,*b = a = 1, c = a = 1;//指针b可以改变其存储的地址,指向其他的int变量//e.g. int d = 2; b = &d;//则改变后指针b存储的是变量d的地址 *b = d = 2;//引用在定义时必须初始化,不能只为空;而指针定义时可只为空指针NULL;//(此处的const引用是指不可以更改引用的对象,也即引用的地址,但可以对引用的对象的数据值进行修改)// sizeof指针得到的是指针本身的大小,sizeof引用得到的是引用对象的大小//指针可以有二级指针如int** a,没有二级引用

作为函数参数传递时的区别

指针作为参数:

调用该函数时,若传入的参数为一般的非指针变量类型,应用取地址符 e.g. function(&parameter);
(函数传入参数的实质是在函数模块中重新定义变量对传入的参数进行拷贝[形参],又由于指针的定义e.g int* a = &b),若传入的参数为指针,则function(pointer)。
[C中没有引用的概念,因而采用二级指针的形式实现引用的功能(对传入参数的本身[实参]进行修改,而不单是对函数中的拷贝变量[形参]进行修改)]

引用作为参数:

实质上传递的是实参本身,即传入的不是实参的拷贝,因而对形参的值的修改其实是对实参的修改,所以在传递参数时用引用可以节省时间及空间。(对于不允许拷贝的以及不需要修改实参值的函数,使用const引用效率会更高)


原创粉丝点击