真题

登录以参加训练计划

GESP考级大纲点击查看 image image image

指针(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

注意,引用在声明时必须初始化,且一旦初始化后就不能再改变其指向的变量。引用在函数参数传递和返回值中特别有用,因为它们可以避免不必要的拷贝操作,提高效率。

指针与引用的主要区别

  1. 可变性​:指针可以改变其指向的地址(即可以重新赋值),而引用一旦初始化就不能再改变其指向的变量。
  2. 空值​:指针可以为空(即可以指向 nullptr),而引用必须始终指向某个有效的变量。
  3. 初始化​:引用在声明时必须初始化,而指针则可以在声明后任意时刻初始化。
  4. 语义​:引用在语义上更接近于常量指针,因为它们都表示对某个特定内存地址的引用。然而,由于引用不能重新赋值,它们在某种程度上比指针更安全。
  5. 大小​:在大多数情况下,指针的大小是固定的(例如,在32位系统上通常为4字节,在64位系统上通常为8字节),而引用的大小则取决于它所引用的变量的类型。然而,在实际编程中,我们通常不需要关心引用的大小,因为编译器会为我们处理这些细节。

章节 1. 真题

进行中

题目 尝试 AC 难度
P2392  进制转换【GESP四级-2023.9】 119 44 5
P2394  幸运数 146 44 6
P2393  变长编码【GESP四级-2023.9】 43 22 4
P2395  图像压缩 28 6 8
P2536  小杨的字典【GESP四级.2023.12】 98 44 4
P2537  田忌赛马【GESP四级.2023.12】 174 38 7
P2554  相似字符串【GESP四级.2024.3】 143 38 7
P2555  做题【GESP四级.2024.3】 166 42 7