结构体定义与声明
结构体(struct)是 C 语言中自定义复合类型的方式,将多个不同类型的数据组合成一个整体。结构体是面向对象编程的基础,也是组织复杂数据的核心工具。C99 引入了匿名结构体、灵活数组成员等特性,增强了结构体的表达能力。
基本定义
struct Point {
int x;
int y;
};
struct Point p1; /* 声明结构体变量 */
struct Point p2 = {10, 20}; /* 初始化 */
声明时定义变量
struct Point {
int x;
int y;
} p1, p2; /* 定义结构体同时声明变量 */
struct {
int x;
int y;
} p3; /* 匿名结构体,只能使用一次 */
typedef 简化
typedef struct {
int x;
int y;
} Point; /* 直接用 Point 声明 */
Point p1 = {10, 20};
不完全类型
struct Node; /* 不完全声明 */
struct Node {
int data;
struct Node *next; /* 自引用 */
};
C99 新特性
混合声明:
struct Point {
int x;
int y;
double distance; /* C99 允许混合声明 */
};
匿名结构体成员(C11,部分编译器 C99 扩展):
struct Inner {
int a;
int b;
};
struct Outer {
struct Inner; /* 匿名成员 */
int c;
};
struct Outer o;
o.a = 10; /* 直接访问匿名成员的成员 */
常见错误
忘记 struct 关键字:
struct Point p; /* 正确 */
Point p; /* 错误:没有 typedef */
结构体定义末尾缺少分号:
struct Point {
int x;
int y
} /* 错误:缺少 ; */
最佳实践
- 用 typedef 简化结构体类型名
- 结构体定义放在头文件中
- 自引用结构体用指针
- 命名清晰,体现结构体的语义