Update Readme.md

This commit is contained in:
Natsume1710
2025-06-16 16:54:53 +08:00
committed by GitHub
parent 8be2211eea
commit 092ea4d5d2
+128 -10
View File
@@ -128,28 +128,146 @@ strcat(msg, " there"); // msg: "Hi there"
```
### ✅ 结构体 / 共用体 / 枚举 / 位域
- **结构体**:定义复杂数据结构
- **共用体**:节省内存,不同字段共享同一块空间
- **枚举**:定义一组命名整数常量
- **位域**:控制结构体中每个字段所占位数
```c
typedef struct {
int id;
char name[20];
} Student;
#### 结构体
**定义:**
union Value {
结构体是将多个不同类型的数据组合在一起的复合数据类型,用于表示实体的多个属性。
**使用场景:**
- 表示传感器、外设状态、网络包头等复杂数据
- 多变量统一传参,提升代码组织性
语法:
```c
struct StructName {
int id;
float value;
char name[20];
};
```
示例:
```c
struct SensorData {
int id;
float temperature;
char location[20];
};
struct SensorData s1 = {1, 36.5, "room_1"};
printf("Sensor: %d, Temp: %.1f\n", s1.id, s1.temperature);
```
#### 共用体
**定义:**
共用体中的所有成员共享同一块内存,任何时刻只能使用其中一个成员。
**使用场景:**
- 节省内存:如嵌入式协议帧解析
- 多种数据格式的重解释
语法:
```c
union UnionName {
int i;
float f;
char c;
};
```
示例:
```c
union Data {
int i;
float f;
};
union Data d;
d.i = 10;
printf("i = %d\n", d.i);
d.f = 3.14;
printf("f = %.2f\n", d.f); // 修改 f 会破坏 i
```
注意事项:
- 占用内存大小为最大成员的大小
- 修改一个成员后,其他成员的值不可预测
#### 枚举(Enumeration)
**定义:**
枚举是一种用户自定义的数据类型,用于定义一组命名的整数常量。
**使用场景:**
- 定义状态机状态
- 表示设备运行模式、错误码
语法:
```c
enum Color { RED, GREEN, BLUE };
enum Color color = GREEN;
```
示例:
```c
enum State {
STATE_IDLE,
STATE_ACTIVE,
STATE_ERROR = 100, // 可手动赋值
STATE_SLEEP
};
enum State current = STATE_ACTIVE;
printf("State: %d\n", current); // 输出 1
```
特性:
- 默认从 0 开始递增
- 可强制设定起始值
#### 位域(Bit Field)
**定义:**
位域用于结构体中,定义每个字段占用的比特位数,实现更细粒度的内存控制。
**使用场景:**
- 配置寄存器映射
- 网络协议比特位字段解析
- 内存空间紧张场景
语法:
```c
struct Flags {
unsigned int ready : 1;
unsigned int error : 1;
unsigned int mode : 2;
};
```
示例:
```c
struct Flags f;
f.ready = 1;
f.error = 0;
f.mode = 3; // 占2位,最大为11(二进制)即3
printf("ready = %d, mode = %d\n", f.ready, f.mode);
```
注意事项:
- 位域不能取地址(&f.ready 不合法)
- 字段数值不能超过位数范围(2^n - 1)
- 与具体编译器实现密切相关(跨平台需小心)
### ✅ 位操作
- 嵌入式开发中用于设置寄存器位、控制硬件