<!--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,会读取成一个极大正数。