<!--markdown--># GESP三级 零散考点总结

一、enum(枚举)

核心知识点

1. 定义:enum 枚举名 { 枚举常量1, 枚举常量2, ... };

  • 例:enum Color { RED, GREEN, BLUE };

2. 枚举常量的默认值:从0开始依次递增

  • 上例中:RED=0,GREEN=1,BLUE=2

3. 类型特性:

  • 在C++中,枚举常量的类型默认与int兼容(可以隐式转换为int)
  • 但严格来说,枚举是独立的类型,不过在旧标准或常见考题中,可认为其底层是int

4. 判断题考点:

  • 题目:“RED 的类型是 int” → 对(默认情况下,枚举常量可当作int处理)

---

二、extern(变量声明关键字)

核心知识点

1. 作用:声明变量/函数在其他文件或作用域中已定义,告诉编译器“该变量已存在,去别处找定义”

2. 声明 vs 定义:

  • 定义:分配内存空间(如 int a;)
  • 声明:不分配内存,仅告知存在(如 extern int a;)

3. 核心规则:

  • 同一个作用域内,变量的定义只能有1次,但extern声明可以有多次

4. 判断题考点:

  • 题目:“extern 声明的变量可以多次定义” → 错(定义只能1次,声明可多次)

---

三、sizeof(运算符,计算字节数)

核心知识点

1. 作用:计算数据类型或变量占用的字节数

2. 例:

  • int arr[] = {5,10,15,20,25,30};
  • sizeof(arr) = 6×4 = 24字节(int占4字节)
  • sizeof(arr[0]) = 4字节
  • sizeof(int) = 4字节

---

五、三目运算符(?:)

核心知识点

1. 语法:条件 ? 表达式1 : 表达式2

  • 等价于:if(条件) 表达式1; else 表达式2;
  • 例如 a = (b > c ? b : c),即if( b > c) a = b; else a = c;

3. 真题考察:

  • 题目1:arr[3 > 2 ? 1 : 2]
  • 3>2为真,取arr[1]
  • 题目2:a > b ? a : b = 10;
  • 语法不合法:该表达式是左值,无法被赋值

---

六、宏定义(#define)

核心知识点

1. 本质:纯文本替换,不进行类型检查

2. 常见错误:

  • 宏定义参数若不加括号,会因运算符优先级导致错误
  • 例:#define SQUARE(x) x * x
  • SQUARE(2+3) 会被替换为 2+3*2+3 = 2+6+3 = 11(不是25)

3. 安全写法:给参数和整体都加括号

  • 修正:#define SQUARE(x) ((x)*(x))

---

七、switch

  • switch:根据 switch() 小括号里表达式的值,跳转到对应 case
  • 考点:每个 case 通常要加 break,不加 break 会穿透执行,从当前 case 一直往下运行所有后续代码。

示例代码(带穿透演示)

cpp

#include <iostream>

using namespace std;

int main() {

int x = 2;

switch (x) {

case 1:

cout << "一" << endl;

break;

case 2:

cout << "二" << endl; // 会执行

// 这里没写 break,发生穿透

case 3:

cout << "三" << endl; // 也会执行

break;

default: // 上面case全部失败时保底执行,相当于else

cout << "其他" << endl;

}

return 0;

}

运行结果

二

三

关键说明

  • x=2 匹配 case2,执行输出 二
  • 因为没有 break,继续穿透执行 case3,输出 三
  • 遇到 break 才会跳出整个 switch

八、unsigned类型

核心知识点

1. 概念:无符号类型,一般在声明语句中作为类型前缀,如unsigned int, unsigned double

2. 考点:unsigned修饰的变量只存正数,例如unsigned int,32位均用来存正数,实际存值范围0 ~ 2^32-1。

3. 难点:unsigned int a = -1; 无符号类型存负数不会取绝对值,正常存储-1的二进制,但读取时当正数,不做补码的-1取反流程,-1的二进制是一大堆的1,会读取成一个极大正数。