📅  最后修改于: 2023-12-03 15:29:44.198000             🧑  作者: Mango
C语言中,结构体和联合体都是用于组织和管理数据的方式。它们提供了一种逻辑上组织不同类型数据的机制。
C语言中的结构体是一个数据类型,可以将不同类型的数据组合成一个逻辑单元,并且可以通过一个名称来访问其成员。
结构体的定义使用 struct
关键字,其基本语法如下:
struct struct_name {
member1_type member1_name;
member2_type member2_name;
/* ... */
};
其中,struct_name
是结构体的名称,memberN_type
和 memberN_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_type
和 memberN_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语言中常用的数据类型,可用于组织和管理多种类型的数据。结构体对应的是实体对象,而联合体对应的是同一位置可以存储不同类型数据的抽象概念。掌握结构体和联合体的使用方式,对于程序架构和代码重构都具有重要的帮助作用。