C/C++中指针和引用的区别
指针有自己的空间,而引用只是一个别名
指针可以认为是一个比较特殊的变量,与其他变量不同之处在于,其保存的是另一个对象的地址,因此指针有自己的内存空间;而引用则是存粹的给某个对象取了一个格外的名字,比如有人大名叫大壮,小名叫小马,但指的都是同一个人。
使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小
因为指针本身有自己的空间,所以sizeof得到的就是指针空间的大小,如果要得到所指对象的大小,需要先对指针进行解引用。在32位系统中,指针的大小为4字节,而64位中为8字节;引用因为只是一个别名,所以得到的就是被引用对象的大小。
指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用
指针作为一个变量,当然可以被赋值为NULL,即不指向任何对象,我们也把这种指针成为野指针;而引用作为某对象的别名,不存在先取一个小名,再把小名赋予某人的骚操作,所以必须被初始化为一个已有对象的引用。
作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象
指针解引用得到具体指的对象,引用就是具体对象本身。
可以有const指针,但是没有const引用
const int * const p可以翻译为指向一个int型常量的指针常量。第一个const是底层const,用于限制指针指向的对象是不可改变的,而第二个const是顶层const,用于限制指针指向的地址是不可改变的;而引用作为一个别名,本身一无所有,所以不存在所谓的const。
指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变
指针就不解释了,你见过把小名自己用用给别人的吗?
指针可以有多级指针(**p),而引用至于一级
在自定义的数据结构或者多维数组中,多级指针用的很频繁。但是一个别名套一个别名是毫无意义的。
指针和引用使用++运算符的意义不一样
指针p++,指的是根据指针指向的类型,进行地址的跳跃。比如char* 类型的一次跳一个字节,int* 类型的一次跳四个字节,其目的都是为了指向下一个对应元素;而引用是某对象的别名,其加一指的就是将对象数据量加一。
如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露
C语言的分配:malloc+强制类型转化+一个指针;C语言的释放:free+一个指针。C++的分配:new+指针;C++的释放:delete+指针。