- 基本概念:
- 指针是一个变量,其值为另一个变量的地址,即直接存储了内存中的一个位置。可以通过解引用操作来访问或修改指针指向的数据。
- 引用是一个变量的别名,对引用的操作就是对被引用变量的操作。引用在声明时必须初始化,并且不能改变引用的对象。
- 语法:
- 指针:
类型 *指针名;
- 引用:
类型 &引用名 = 被引用变量;
- 指针:
- 空值:
- 指针可以有空值(NULL, nullptr),表示它不指向任何对象。
- 引用必须连接到一块合法的内存,一旦绑定到一个对象上,就不能再改变引用的目标。
- 初始化:
- 指针可以在任何时候被初始化,也可以先声明后赋值。
- 引用在声明的时候必须被初始化,并且一旦指定了一个对象后,就不能再引用其他对象。
- 内存地址:
- 指针本身是一个独立的变量,因此除了能存储地址之外,还有自己的内存地址。
- 引用并不占据内存空间,它只是原始变量的一个别名。
- 操作符:
- 指针使用*进行解引用,用以访问目标变量;使用&取得一个变量的地址。
- 引用使用&在声明时建立关联,之后无需特殊操作符,就像操作普通变量一样。
- 用途差异:
- 指针的灵活性更高,更适合于执行复杂的内存操作,例如动态内存分配、数组遍历等。
- 引用通常用作函数参数或返回值,以简化代码和避免指针可能导致的错误。
- 重新赋值:
- 指针可以被重新赋值,指向另一个不同的地址。
- 引用一旦被绑定到一个对象上,就不能改变这个绑定关系。