Add files via upload

This commit is contained in:
Natsume1710
2025-06-16 13:51:29 +08:00
committed by GitHub
parent 82e51468db
commit 320ad1bf46
@@ -0,0 +1,263 @@
## 🔵 第一层: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'}; // 手动指定
```
- 常用字符串函数
```
// 需包含头文件 <string.h>
strlen(str); // 计算长度(不含 '\0')
strcpy(dest, str); // 拷贝
strcmp(a, b); // 比较字符串
strcat(a, b); // 将 b 拼接到 a 后面
```
```c
#include <string.h>
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
```