返回

结构体联合体和枚举体

见解分享

结构体(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语言中重要的数据结构。它们可以用来表示各种各样的数据,并可以方便地访问和操作这些数据。