📜  C |结构与联合|问题7(1)

📅  最后修改于: 2023-12-03 15:29:44.198000             🧑  作者: Mango

C结构体和联合体

C语言中,结构体和联合体都是用于组织和管理数据的方式。它们提供了一种逻辑上组织不同类型数据的机制。

结构体

C语言中的结构体是一个数据类型,可以将不同类型的数据组合成一个逻辑单元,并且可以通过一个名称来访问其成员。

定义结构体

结构体的定义使用 struct 关键字,其基本语法如下:

struct struct_name {
    member1_type member1_name;
    member2_type member2_name;
    /* ... */
};

其中,struct_name 是结构体的名称,memberN_typememberN_name 分别是结构体的成员的类型和名称。

示例

struct student {
    char name[20];
    int age;
    float score;
};

上面这个例子定义了一个名为 student 的结构体,该结构体包含三个成员,分别是一个字符数组、一个整型和一个浮点数。

访问结构体成员

结构体成员的访问使用点 . 运算符,其语法如下:

struct_name.member_name

其中,struct_name 是结构体的名称,member_name 是结构体的成员的名称。

示例

struct student s = {"Tom", 18, 90.5};
printf("name:%s age:%d score:%.1f\n", s.name, s.age, s.score);

上面这个例子通过 . 运算符来访问结构体 student 的成员。

联合体

C语言中的联合体是一种特殊的结构体,它可以存储不同类型的数据,但是在同一时刻只能有一个成员被有效地访问。

定义联合体

联合体的定义使用 union 关键字,其基本语法与结构体相似,如下:

union union_name {
    member1_type member1_name;
    member2_type member2_name;
    /* ... */
};

其中,union_name 是联合体的名称,memberN_typememberN_name 分别是联合体的成员的类型和名称。

示例

union data {
    int i;
    float f;
    char str[20];
};

上面这个例子定义了一个名为 data 的联合体,该联合体包含三个成员,分别是一个整型、一个浮点数和一个字符数组。

访问联合体成员

联合体成员的访问与结构体不同,需要使用成员所在位置的地址来访问成员。其语法如下:

union_name.member_name

其中,union_name 是联合体的名称,member_name 是联合体的成员的名称。

示例

union data d;
d.i = 20;
printf("i:%d f:%.1f str:%s\n", d.i, d.f, d.str);
d.f = 30.5;
printf("i:%d f:%.1f str:%s\n", d.i, d.f, d.str);
strcpy(d.str, "hello");
printf("i:%d f:%.1f str:%s\n", d.i, d.f, d.str);

上面这个例子通过成员所在位置的地址来访问联合体 data 的成员。

总结

结构体和联合体是C语言中常用的数据类型,可用于组织和管理多种类型的数据。结构体对应的是实体对象,而联合体对应的是同一位置可以存储不同类型数据的抽象概念。掌握结构体和联合体的使用方式,对于程序架构和代码重构都具有重要的帮助作用。