GESP三级 零散考点总结

一、enum(枚举)

核心知识点

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

    • 例:enum Color { RED, GREEN, BLUE };
  2. 枚举常量的默认值:从0开始依次递增

    • 上例中:RED=0GREEN=1BLUE=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;
  2. 真题考察

    • 题目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 一直往下运行所有后续代码。

示例代码(带穿透演示)

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

标签: none

评论已关闭