真题
登录以参加训练计划
指针(Pointer)
指针是一个变量,其值为另一个变量的地址。你可以通过指针来间接访问或修改该地址处存储的值。指针在C++中广泛使用,尤其是在处理动态内存分配、数据结构(如链表、树等)以及某些底层编程任务时。
指针的基本语法如下:
int x = 10;
int* ptr = &x; // ptr 是一个指向 int 类型的指针,存储了 x 的地址
// 通过指针访问 x 的值
cout << *ptr << endl; // 输出 10
// 通过指针修改 x 的值
*ptr = 20;
cout << x << endl; // 输出 20
&
符号用于获取变量的地址。*
符号用于解引用指针,即访问指针指向的变量的值。
指针可以指向任何有效的内存地址,也可以为 nullptr
(或 NULL
,但在C++11及以后推荐使用 nullptr
)表示空指针。
引用(Reference)
引用是已存在变量的别名。一旦引用被初始化,它就不能再指向其他变量。引用在语法上类似于变量,但在语义上更接近于常量指针(即指向某个地址且不能改变的指针)。
引用的基本语法如下:
int x = 10;
int& ref = x; // ref 是 x 的引用
// 通过引用访问 x 的值
cout << ref << endl; // 输出 10
// 通过引用修改 x 的值
ref = 20;
cout << x << endl; // 输出 20
注意,引用在声明时必须初始化,且一旦初始化后就不能再改变其指向的变量。引用在函数参数传递和返回值中特别有用,因为它们可以避免不必要的拷贝操作,提高效率。
指针与引用的主要区别
- 可变性:指针可以改变其指向的地址(即可以重新赋值),而引用一旦初始化就不能再改变其指向的变量。
- 空值:指针可以为空(即可以指向
nullptr
),而引用必须始终指向某个有效的变量。 - 初始化:引用在声明时必须初始化,而指针则可以在声明后任意时刻初始化。
- 语义:引用在语义上更接近于常量指针,因为它们都表示对某个特定内存地址的引用。然而,由于引用不能重新赋值,它们在某种程度上比指针更安全。
- 大小:在大多数情况下,指针的大小是固定的(例如,在32位系统上通常为4字节,在64位系统上通常为8字节),而引用的大小则取决于它所引用的变量的类型。然而,在实际编程中,我们通常不需要关心引用的大小,因为编译器会为我们处理这些细节。
- 参加人数
- 81
- 创建人