📅  最后修改于: 2023-12-03 15:00:12.109000             🧑  作者: Mango
在C语言中,结构和联合是两个重要的数据类型。两者都可以用来描述多个不同类型的数据,但是它们具有不同的特点和使用场景。
结构体是一种用户自定义的数据类型,可以将多个不同类型的数据组合在一起,形成一个单独的实体。在结构体中,每个数据成员都可以有不同的数据类型,例如:
struct person {
char name[50];
int age;
double height;
};
上面的代码定义了一个名为person
的结构体,包含了一个字符数组name
、一个整数age
和一个双精度浮点数height
。我们可以使用person
作为一个单独的实体来访问它的成员变量,例如:
struct person teacher = {"Tom", 35, 1.75};
printf("Teacher's name: %s, age: %d, height: %f", teacher.name, teacher.age, teacher.height);
结构体可以嵌套使用,例如:
struct point {
int x;
int y;
};
struct rectangle {
struct point top_left;
struct point bottom_right;
};
上面的代码定义了两个结构体point
和rectangle
,其中rectangle
中嵌套了point
。这种嵌套结构体的方式可以让我们更清晰地描述出复杂数据。
联合体与结构体类似,也可以将多个不同类型的数据组合在一起,但是联合体的所有成员共用同一块内存空间。在联合体中,数据成员不能同时存在于内存中,只有最后一次赋值的成员才能在内存中存在,例如:
union data {
int i;
float f;
char str[20];
};
union data d;
d.i = 10;
printf("%d\n", d.i);
d.f = 3.14;
printf("%f\n", d.f);
strcpy(d.str, "hello");
printf("%s\n", d.str);
上面的代码定义了一个名为data
的联合体,包含了一个整数i
、一个浮点数f
和一个字符数组str
。我们可以通过给某个成员变量赋值来访问它们的成员,但是在访问某个成员后,所有成员的值都会发生变化。
由于联合体的所有成员使用同一块内存,所以它通常用于处理相对简单的数据类型转换问题,或者在嵌入式系统中尽量减小内存使用。
结构体和联合体都可以用于组合不同类型的数据,但是它们有不同的使用场景: