在C语言中,结构体(struct)和联合体(union)是两种重要的数据类型,它们允许你将多个不同的数据类型组合成一个单一的数据类型。
结构体(struct)
结构体是一种复合数据类型,允许你将多个不同类型的数据项组合成一个单独的数据类型。结构体可以包含不同类型的成员,如整数、浮点数、字符等。
下面是一个简单的结构体示例:
#include <stdio.h>
// 定义一个名为student的结构体
struct student {
char name[50];
int age;
float score;
};
int main() {
// 声明一个student类型的变量s
struct student s;
// 为s的成员赋值
strcpy(s.name, "张三");
s.age = 20;
s.score = 90.5;
// 打印s的成员
printf("Name: %s, Age: %d, Score: %.1f\n", s.name, s.age, s.score);
return 0;
}
在这个例子中,我们定义了一个名为student
的结构体,它包含三个成员:一个字符数组name
用于存储学生姓名,一个整数age
用于存储学生年龄,和一个浮点数score
用于存储学生分数。然后我们在main
函数中声明了一个student
类型的变量s
,并为其成员赋值。
联合体(union)
联合体是一种特殊的数据类型,允许你在相同的内存位置存储不同的数据类型。但是,在任何给定的时间,联合体只能保存一个成员的值。
下面是一个简单的联合体示例:
#include <stdio.h>
// 定义一个名为data的联合体
union data {
int i;
float f;
char str[20];
};
int main() {
// 声明一个data类型的变量d
union data d;
// 为d的不同成员赋值
d.i = 10;
printf("Integer value: %d\n", d.i);
d.f = 220.5;
printf("Float value: %.1f\n", d.f);
strcpy(d.str, "Hello");
printf("String value: %s\n", d.str);
return 0;
}
在这个例子中,我们定义了一个名为data
的联合体,它包含三个成员:一个整数i
,一个浮点数f
,和一个字符数组str
。但是请注意,由于联合体在同一内存位置存储所有成员,因此当你为d.f
赋值后,d.i
的值将被覆盖,同样地,当你为d.str
赋值后,d.f
和d.i
的值也将被覆盖。
此外,你还可以使用typedef
关键字为结构体和联合体创建别名,以便更简洁地引用它们。例如:
typedef struct student {
char name[50];
int age;
float score;
} Student;
// 然后你可以像这样声明一个Student类型的变量:
Student s;