在C语言中,structure(结构体)和union(联合体)是用于组织和存储不同类型数据的方式。它们有相似之处,但也有一些关键的区别。
Structure(结构体):
结构体是一种用户自定义的数据类型,可以将不同类型的变量组合在一起形成一个逻辑上相关的数据单元。结构体的成员可以是不同的数据类型,每个成员都有自己的名称和内存地址。结构体的各个成员在内存中是按照定义的顺序存储的,每个成员占据自己的内存空间。
下面是一个示例,展示如何定义和使用结构体:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <stdio.h>
// 定义结构体
struct Person {
char name[20];
int age;
float height;
};
int main() {
// 创建结构体变量
struct Person person1;
// 访问结构体成员并赋值
strcpy(person1.name, "John");
person1.age = 25;
person1.height = 1.75;
// 输出结构体成员的值
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);
return 0;
}
|
上述示例中,我们定义了一个名为 “Person” 的结构体,包含了名字、年龄和身高三个成员。在 main()
函数中,我们创建了一个名为 “person1” 的结构体变量,并通过成员访问操作符 .
分别对其成员进行赋值和访问。
Union(联合体):
联合体也是一种用户自定义的数据类型,它允许在同一内存位置存储不同类型的数据,但每次只能使用其中的一个成员。联合体的所有成员共享同一块内存,它的大小由最大的成员决定。
下面是一个示例,展示如何定义和使用联合体:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <stdio.h>
// 定义联合体
union Data {
int num;
float f;
char str[20];
};
int main() {
// 创建联合体变量
union Data data;
// 对不同成员赋值
data.num = 10;
printf("Num: %d\n", data.num);
data.f = 3.14;
printf("Float: %.2f\n", data.f);
strcpy(data.str, "Hello");
printf("String: %s\n", data.str);
return 0;
}
|
上述示例中,我们定义了一个名为 “Data” 的联合体,包含了整型、浮点型和字符型三个成员。在 main()
函数中,我们创建了一个名为 “data” 的联合体变量,并分别对不同成员进行赋值和访问。需要注意的是,联合体的不同成员共享同一块内存,所以在给一个成员赋值后,其他成员的值会被覆盖。
关键区别总结:
- 结构体允许存储多个成员,每个成员都占据自己的内存空间。
- 联合体只能同时存储一个成员,所有成员共享同一块内存空间。
结构体适合用于表示相关但不同类型的数据集合,而联合体适合用于节省内存,同时只需存储一种类型的数据,或者在不同类型数据之间进行转换。