自学嵌入式day17,共用体,枚举,位操作
·
共用体(联合体)
定义与语法
共用体是一种自定义类型,所有成员共享同一块内存空间,其大小由最大成员决定。语法如下:
union 类型名 {
数据类型 成员1;
数据类型 成员2;
// ...
};
示例
union DATA {
int a;
char c;
float f;
};
特性
- 成员共享内存,修改任一成员会影响其他成员的值。
- 大小为最大成员的大小(如
union DATA的大小为sizeof(float))。
应用场景
- 大小端判断:通过共用体访问同一内存的不同类型数据。
- 函数参数传递:如 Linux 的
epoll事件结构体中使用共用体传递不同事件类型。
枚举类型
定义与语法
枚举用于定义一组命名的整型常量,限定变量的取值范围。语法如下:
enum 类型名 { 枚举值1, 枚举值2, ... };
示例
enum WEEK { MON=0, TUE, WED, THU=5, FRI, SAT, SUN };
特性
- 默认从 0 开始递增,可显式赋值(如
THU=5后FRI为 6)。 - 枚举值为
int类型,可直接用于整型表达式。
应用场景
- 搭配
switch:提高代码可读性。 - 状态标识:如月份、星期等有限集合。
代码示例
typedef enum { JAN, FEB, MAR, ..., JULY } MONTH;
MONTH mon = MAY;
switch (mon) {
case JAN: printf("January\n"); break;
// ...
}
位操作
运算符与功能
| 运算符 | 功能 | 示例 |
|---|---|---|
& | 按位与 | a & b(清特定位为 0) |
| ` | ` | 按位或 |
^ | 按位异或 | a ^ b(交换两数) |
~ | 按位取反 | ~a(所有位反转) |
<< | 左移(低位补 0) | a << 2 |
>> | 右移(逻辑/算术) | a >> 2 |
应用场景
- 硬件寄存器操作:如设置或清除特定位。
- 数据交换:通过异或实现无临时变量的两数交换。
示例
int a = 20, b = 10;
a = a ^ b; // 异或交换
b = a ^ b;
a = a ^ b;
堆内存管理
核心函数
malloc(size_t size):动态申请指定大小的内存。free(void *ptr):释放已申请的内存。
注意事项
- 内存泄漏:未释放不再使用的内存,导致程序最终崩溃。
- 野指针:释放后未置空指针,可能引发非法访问。
示例
int *arr = (int *)malloc(10 * sizeof(int));
if (arr != NULL) {
// 使用内存
free(arr);
arr = NULL; // 避免野指针
}
更多推荐

所有评论(0)