注:参考自bilibili系列视频,指针和引用视频https://www.bilibili.com/video/BV1kT4y177WE
指针
指针是在内存中的四字节存储空间,指针存储的内容就是一个地址,根据这个地址可以找到另外一片内存,指针就是这片内存的索引。简单的讲,指针就是一种保存变量地址的变量。
引用
在编译器层面上,引用就是指针,因为把代码反汇编之后,指针和引用生成的汇编代码是一模一样的。指针和引用是在语法层面上的概念。
指针和引用在语法层面上的区别
初始化时的区别
指针可以不初始化,即野指针。
引用不可以不初始化,会报错,更安全。
再次赋值时的区别
第二次赋值a时,指针会指向a,而引用还是指向第一个地址,且给第一个地址赋值为a。
指针再次赋值是改变的指针指向,即改变了指针存的地址值,不会对地址中的内容做改变。
引用始终指向第一个地址,再次赋值不会改变指针指向,把其指向的地址内容改为所赋的值。
代码层面(引用):
int a = 3;
int &p = a;
p = 4; //这里相当于 a=4
++操作
指针++操作,是根据指针存的数据类型对地址的偏移。
引用++操作,是对地址中内容++操作,如果存int值,就是对int值+1。
sizeof()
对指针sizeof(),在大部分机器上,结果都是4字节。
对于引用 sizeof(),是该引用类型的长度,如果该引用是类类型,类中有2个int,那么sizeof()为2*4=8字节;
技术总结
引用是指针的限制版本,让引用更安全。指针可以是野指针,引用不能。平时编程时,建议在能使用引用的情况下,就不要轻易使用指针,当然,在操作数组或者大面积内存时,用指针更好。