结构体联合体和枚举体
2023-12-02 05:25:50
结构体(struct)
结构体(struct)是一种将不同类型的数据组合在一起的数据类型,可以用来表示一个具有多个成员的实体。结构体变量在内存中是按照声明的顺序存储的。
1. 定义和特点
结构体的定义形式如下:
struct structure_name {
member_type1 member_name1;
member_type2 member_name2;
...
member_typen member_namen;
};
其中,structure_name是结构体的名称,member_type1、member_type2、...、member_typen是结构体成员的数据类型,member_name1、member_name2、...、member_namen是结构体成员的名称。
2. 内存存储
结构体的成员在内存中是按照声明的顺序存储的。结构体part1的位置就是第一个成员的首位置,再根据成员的数据类型决定他们各自占据多大内存。
3. 成员访问
结构体成员可以通过点运算符(.)来访问。例如,假设有一个结构体变量part1,它的第一个成员是成员变量num,则可以使用part1.num来访问num的值。
4. 初始化
结构变量可以在声明的同时进行初始化,但是初始化的值必须按照结构体成员的顺序写,且用于初始化的表达式必须是常量,剩余的成员用0作为它的初始值。
struct part1 {
int num;
char name[20];
};
struct part1 part11 = {100, "John"};
联合体(union)
联合体(union)是一种将不同类型的数据存储在同一块内存中的数据结构。联合体中的成员共用同一块内存空间,因此联合体的大小等于其中最大成员的大小。
1. 定义和特点
联合体的定义形式如下:
union union_name {
member_type1 member_name1;
member_type2 member_name2;
...
member_typen member_namen;
};
其中,union_name是联合体的名称,member_type1、member_type2、...、member_typen是联合体成员的数据类型,member_name1、member_name2、...、member_namen是联合体成员的名称。
2. 内存存储
联合体中的成员共用同一块内存空间,因此联合体的大小等于其中最大成员的大小。联合体成员在内存中的存储顺序是任意的。
3. 成员访问
联合体成员可以通过点运算符(.)来访问。例如,假设有一个联合体变量union1,它的第一个成员是成员变量num,则可以使用union1.num来访问num的值。
4. 初始化
联合变量也可以在声明的同时进行初始化,但是初始化的值只能是其中一个成员的值,其余的成员的值是未定义的。
union part2 {
int num;
char name[20];
};
union part2 part22 = {100};
枚举体(enum)
枚举体(enum)是一种将一组具有相关性的常量值组合在一起的数据类型。枚举体中的常量值称为枚举成员。
1. 定义和特点
枚举体的定义形式如下:
enum enum_name {
member1,
member2,
...
membern
};
其中,enum_name是枚举体的名称,member1、member2、...、membern是枚举体的成员。
2. 成员访问
枚举体成员可以通过点运算符(.)来访问。例如,假设有一个枚举体变量enum1,它的第一个成员是成员变量member1,则可以使用enum1.member1来访问member1的值。
3. 初始化
枚举变量可以在声明的同时进行初始化,但初始化的值必须是枚举体中的成员。
enum part3 {
A,
B,
C
};
enum part3 part33 = A;
结构体、联合体和枚举体的应用场景
结构体、联合体和枚举体在实际编程中都有着广泛的应用。
- 结构体 通常用于表示具有多个成员的实体,例如学生信息、员工信息等。
- 联合体 通常用于在程序中存储不同类型的数据,例如输入输出设备的数据、文件头信息等。
- 枚举体 通常用于定义一组具有相关性的常量值,例如颜色、星期、性别等。
总结
结构体、联合体和枚举体是C语言中重要的数据结构。它们可以用来表示各种各样的数据,并可以方便地访问和操作这些数据。