📅  最后修改于: 2023-12-03 15:00:13.898000             🧑  作者: Mango
在 C 语言中,结构(Structure)和联合(Union)是两种非常重要的数据类型,它们都可以用于存储多个不同数据类型的值。然而,它们之间还是有很大的区别的。
结构是一种用户自定义的数据类型,它允许我们将不同类型的变量组合成一个整体,这个整体被称为结构体(Structure)。定义结构体的语法如下:
struct 结构体名
{
数据类型 成员变量1;
数据类型 成员变量2;
//...
};
例如,我们可以定义一个表示学生信息的结构体:
struct Student
{
char name[20];
int age;
float score;
};
结构体有以下特点:
我们可以定义一个结构体数组来存储多个学生的信息:
#include <stdio.h>
struct Student
{
char name[20];
int age;
float score;
};
int main()
{
struct Student students[3] = {{"Alice", 18, 85.5},
{"Bob", 20, 76.0},
{"Charlie", 19, 92.5}};
for (int i = 0; i < 3; i++)
{
printf("Name: %s, Age: %d, Score: %.1f\n", students[i].name, students[i].age, students[i].score);
}
return 0;
}
输出结果为:
Name: Alice, Age: 18, Score: 85.5
Name: Bob, Age: 20, Score: 76.0
Name: Charlie, Age: 19, Score: 92.5
联合是一种特殊的结构体,它与结构体的定义形式类似,不同之处在于联合体(Union)只能同时存储一个成员变量的值。定义联合体的语法如下:
union 联合体名
{
数据类型 成员变量1;
数据类型 成员变量2;
//...
};
例如,我们可以定义一个能够同时存储浮点数、整数和字符型的联合体:
union Variant
{
float f;
int i;
char c;
};
联合体有以下特点:
我们通过一个程序来说明联合的使用方法:
#include <stdio.h>
union Variant
{
float f;
int i;
char c;
};
int main()
{
union Variant v;
v.f = 3.14;
printf("v.f = %.2f, v.i = %d, v.c = '%c'\n", v.f, v.i, v.c);
v.i = 1024;
printf("v.f = %.2f, v.i = %d, v.c = '%c'\n", v.f, v.i, v.c);
v.c = 'A';
printf("v.f = %.2f, v.i = %d, v.c = '%c'\n", v.f, v.i, v.c);
return 0;
}
输出结果为:
v.f = 3.14, v.i = 1078523331, v.c = '\x8d'
v.f = 0.00, v.i = 1024, v.c = '\x00'
v.f = 65.00, v.i = 1090519040, v.c = 'A'
结构和联合之间的最大区别在于内存的分配方式和使用方式:
因此,当我们需要同时存储多个不同类型的值时,应该使用结构体;当我们需要在不同条件下使用不同类型的数据时,或者需要节省内存空间时,应该使用联合体。
结构体和联合体是 C 语言中两种非常重要的数据类型,它们本质上都是用于将不同类型的变量组合在一起的。通过对结构体和联合体的学习,我们可以更好地理解 C 语言中的复合数据类型,进而写出更加高效、简洁的代码。