C 结构体(struct)
结构体将不同类型的数据组合在一起,常用于建模实体、复合数据与抽象数据类型。
1. 定义与初始化
c
struct Point { int x; int y; };
struct Point p1 = { .x = 3, .y = 4 }; // 指定初始化(C99)2. 访问与嵌套
c
struct Rect { struct Point a, b; };
struct Rect r = { {0,0}, {10,5} };
printf("%d\n", r.b.x);3. 指针与 -> 运算符
c
struct Point *pp = &p1;
printf("%d\n", pp->y);4. typedef 简化
c
typedef struct { int year, month, day; } Date;
Date d = {2025,9,1};5. 对齐与填充
- 结构体成员按其对齐要求插入填充字节,影响
sizeof - 可通过重排成员减少填充
6. 赋值与比较
- 结构体可以整体赋值/传参/返回
- 比较需逐成员比较(不可直接
==)
7. 位域(见专章)与灵活数组成员
c
struct Packet {
unsigned short len;
unsigned char data[]; // C99 可变尾随数组
};8. 小结
结构体是建模与抽象的基础,理解对齐、指针访问与整体赋值规则尤为重要。