From 67b269a6e1081eea74bb7dbaa1c26045614b3388 Mon Sep 17 00:00:00 2001 From: Natsume1710 <162396185+Natsume1710@users.noreply.github.com> Date: Mon, 16 Jun 2025 14:37:19 +0800 Subject: [PATCH] =?UTF-8?q?Delete=20C=E8=AF=AD=E8=A8=80=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E4=B8=8E=E8=BF=9B=E9=98=B6.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C语言基础与进阶.md | 263 --------------------------------------------- 1 file changed, 263 deletions(-) delete mode 100644 C语言基础与进阶.md diff --git a/C语言基础与进阶.md b/C语言基础与进阶.md deleted file mode 100644 index 00e2acb..0000000 --- a/C语言基础与进阶.md +++ /dev/null @@ -1,263 +0,0 @@ -## 🔵 第一层:C/C++ 语言基础与进阶(必修) - -### ✅ 变量 / 数据类型 / 关键字 / 常量 - -#### 📌 变量(Variable) -- 用于在程序中存储数据的具名内存区域。 -- 声明格式:`类型 变量名 [= 初始值];` -```c -int count = 10; -float temperature; -char c = 'A'; -``` -- 局部变量:函数内声明,仅在函数内部可用。 -- 全局变量:函数外声明,整个文件或项目中可见(根据作用域)。 - -#### 📌 数据类型(Data Types) -- **整型**:`int`, `short`, `long`, `long long`, `unsigned` -- **浮点型**:`float`, `double` -- **字符型**:`char` -- **派生类型**:指针、数组、结构体等 -```c -unsigned int u = 100; -long long big_number = 12345678900LL; -``` - -#### 📌 关键字(Keywords) -常用 C 关键字解释如下: -| 关键字 | 说明 | -|------------|------------------------------| -| `const` | 定义只读变量 | -| `volatile` | 防止编译器优化,常用于寄存器 | -| `static` | 变量作用域或函数仅在本文件可见 | -| `extern` | 声明外部变量/函数 | -| `typedef` | 为数据类型取别名 | -```c -static int counter = 0; // 内部链接 -extern int g_value; // 声明外部变量 -volatile uint32_t *reg = (uint32_t *)0x40021000; // 用于寄存器访问 -``` - -#### 📌 常量(Constant) -- **字面常量**:如 `10`, `3.14`, `'a'`, `"abc"` -- **符号常量**:用 `#define` 或 `const` 定义 -```c - #define PI 3.14159 -const int MAX_SIZE = 100; -``` - ---- - -### ✅ 栈 和 堆(内存管理) -- **栈 (stack)**:自动分配内存,函数退出即释放。 - - 示例:局部变量、函数参数等 -- **堆 (heap)**:使用 `malloc` / `free` 手动分配和释放 -```c -// 栈内存示例 -void func() { - int a = 10; // a 在栈中 -} -// 堆内存示例 -int *p = (int *)malloc(sizeof(int) * 10); -if (p) { - p[0] = 100; - free(p); -} -``` - -### ✅ 指针 / 指针数组 / 二级指针 -- **指针**:保存变量的地址 -- **指针数组**:数组中每个元素是一个指针 -- **二级指针**:指向指针的指针 -```c -int val = 42; -int *p = &val; -int **pp = &p; -printf("%d\n", **pp); // 输出 42 -``` - -### ✅ 函数指针 / 函数指针数组 -- **函数指针声明**:`int (*fp)(int)` 表示指向返回 `int` 的函数的指针 -- **函数指针数组**:用于策略模式或注册多个处理函数 -```c -int add(int a, int b) { return a + b; } -int sub(int a, int b) { return a - b; } - -int (*ops[2])(int, int) = { add, sub }; -printf("%d\n", ops[0](5, 3)); // 输出 8 -``` - -### ✅ 表达式、语句、运算符 -- 表达式:`a + b`, `x++`, `p[i]` -- 运算符:`+`, `-`, `*`, `/`, `%`, `&&`, `||`, `!`, `==`, `!=` -- 语句:控制流程结构 `if`, `for`, `while`, `switch` - -### ✅ 数组 / 字符串 -#### 数组(Array) -- 数组是一组相同类型数据的有序集合,在内存中连续存储。 -- 一维数组定义:`类型 数组名[大小];` - -```c -int arr[5] = {1, 2, 3, 4, 5}; -char str[10] = "Hello"; -``` - -- 数组索引从 0 开始,访问方式如:arr[2] 表示第三个元素。 -- 多维数组:int matrix[3][4]; 表示 3 行 4 列矩阵。 -#### 字符串(String) -- 字符串是以空字符 '\0' 结尾的字符数组。 -- 定义方式: -```c -char str1[] = "Hello"; // 自动添加 '\0' -char str2[6] = {'H','e','l','l','o','\0'}; // 手动指定 -``` -- 常用字符串函数 -``` -// 需包含头文件 -strlen(str); // 计算长度(不含 '\0') -strcpy(dest, str); // 拷贝 -strcmp(a, b); // 比较字符串 -strcat(a, b); // 将 b 拼接到 a 后面 -``` -```c - #include - -char msg[20]; -strcpy(msg, "Hi"); // msg: "Hi" -strcat(msg, " there"); // msg: "Hi there" -``` - -### ✅ 结构体 / 共用体 / 枚举 / 位域 -- **结构体**:定义复杂数据结构 -- **共用体**:节省内存,不同字段共享同一块空间 -- **枚举**:定义一组命名整数常量 -- **位域**:控制结构体中每个字段所占位数 -```c -typedef struct { - int id; - char name[20]; -} Student; - -union Value { - int i; - float f; -}; - -enum Color { RED, GREEN, BLUE }; - -struct Flags { - unsigned int ready : 1; - unsigned int error : 1; -}; -``` - -### ✅ 位操作 -- 嵌入式开发中用于设置寄存器位、控制硬件 -```c -#define LED_PIN (1 << 2) -PORT |= LED_PIN; // 置位 -PORT &= ~LED_PIN; // 清零 -PORT ^= LED_PIN; // 翻转 -``` - -### ✅ 关键语义 & 修饰符 -#### `const`(只读限定符) -```c -const int a = 10; -void print(const char* msg); // msg 不可修改 -``` - -#### `volatile`(防止优化) -```c -volatile int *reg = (int *)0x40021000; // 硬件寄存器访问 -``` - -#### `static`(静态变量/内部链接) -```c -static int count = 0; // 静态变量,函数调用间保留值 -``` - -#### `extern`(外部变量声明) -```c -extern int global_var; -``` - -#### `register`(提示变量存放寄存器) -```c -register int speed; -``` - -#### `auto`(默认局部变量) -```c -auto int a = 10; // 一般可省略 auto -``` - -### ✅ 内存存储类型与生命周期 - -| 存储类型 | 生命周期 | 作用域 | 关键字 | -|------------|-----------------|-------------------|--------------| -| 栈(stack) | 函数调用期间 | 局部变量 | auto | -| 静态区 | 程序全程 | 局部/全局 | static | -| 堆(heap) | 手动管理 | 全局 | malloc/free | -| 寄存器 | 函数调用期间 | 局部 | register | - -### ✅ 编译与调试基础 - -#### C 编译四阶段(以 GCC 为例) -```bash -gcc -E main.c -o main.i # 预处理 -gcc -S main.c -o main.s # 编译为汇编 -gcc -c main.c -o main.o # 汇编为目标文件 -gcc main.o -o main # 链接生成可执行文件 -``` - -#### Makefile 示例 -```makefile -CC = gcc -TARGET = app -OBJS = main.o utils.o - -$(TARGET): $(OBJS) - $(CC) -o $@ $^ - -%.o: %.c - $(CC) -c $< -o $@ - -clean: - rm -f *.o $(TARGET) -``` - -#### GCC 编译参数 -| 参数 | 含义 | -|------|------| -| `-Wall` | 开启所有警告 | -| `-g` | 含调试信息 | -| `-O2` | 优化等级 | -| `-I` | 头文件路径 | -| `-L`/`-l` | 库路径和链接 | -| `-D` | 宏定义 | - -#### GDB 基础调试 -```bash -gdb ./main -(gdb) break main -(gdb) run -(gdb) next / step -(gdb) print var -(gdb) continue -``` - -#### 内联汇编 -```c -int result; -__asm__ __volatile__ ( - "movl $5, %%eax;" - "movl $3, %%ebx;" - "addl %%ebx, %%eax;" - "movl %%eax, %0;" - : "=r"(result) - : - : "%eax", "%ebx" -); -printf("result = %d\n", result); // 输出 8 -``` \ No newline at end of file