Bootstrap

引用与指针的区别

1、语法上

指针:指针是一个变量,存储了另一个变量的内存地址。指针的声明需要在类型前加上星号 *。
引用:引用是另一个变量的别名,它在声明时必须初始化,并且一旦初始化,就不能更改引用的对象。引用的声明需要在类型前加上 &。 

2、定义上 

指针:int *a;
引用:int& a_1 = a;

3、改变指向

指针:可以任意改变指向方向
引用:一旦初始化,就不能更改引用的对象

4、初始化

指针:可以初始化为NULL,也可以不初始化
引用:声明时必须初始化

5、使用场景

指针:适用于需要动态内存分配、多级间接访问、复杂的内存管理等情况。 
引用:适用于函数参数传递、返回值、作为别名使用等场景,尤其是在不需要改变引用对象的情况下。

6、函数参数传递

指针:可以通过指针实现按地址传递,允许函数修改实参的值,也可以传递 nullptr 。

引用:通过引用传递参数可以允许函数修改实参的值,但不允许传递空引用。

7、安全性

指针:指针操作更加复杂,容易出错,如空指针解引用、野指针等。 
引用:引用更安全,因为它们总是指向一个有效的对象,并且不能被重新赋值。

8、自增运算意义不同

p++之后指向a后面的内存,s++相当于a++。

9、sizeof 的运算结果不同

;