在 C 语言中,结构体和联合体是用于定义自定义数据类型的两种重要方式。它们允许将多个不同类型的数据组合在一起,形成一个单独的实体。
结构体是一种用户定义的数据类型,可以将多个不同类型的变量组合在一起。每个变量称为“成员”。
// 定义结构体
struct Person {
char name[50];
int age;
float height;
};
// 使用结构体
int main() {
struct Person person1; // 声明结构体变量
// 访问并赋值
strcpy(person1.name, "Alice");
person1.age = 30;
person1.height = 5.6;
// 输出
printf("Name: %s, Age: %d, Height: %.2f\n", person1.name, person1.age, person1.height);
return 0;
}
嵌套结构体是指一个结构体的成员本身也是一个结构体,这可以帮助我们定义更复杂的数据类型。
// 定义嵌套结构体
struct Date {
int day;
int month;
int year;
};
struct Person {
char name[50];
int age;
struct Date birthday; // 嵌套的 Date 结构体
};
int main() {
struct Person person1;
strcpy(person1.name, "Bob");
person1.age = 25;
person1.birthday.day = 15;
person1.birthday.month = 8;
person1.birthday.year = 1995;
printf("Name: %s, Age: %d, Birthday: %d/%d/%d\n",
person1.name, person1.age,
person1.birthday.day, person1.birthday.month, person1.birthday.year);
return 0;
}
联合体是一种特殊的数据类型,类似于结构体,但它的所有成员共享同一个内存空间。这意味着在某一时刻只能存储其中一个成员的数据。
// 定义联合体
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
data.i = 10;
printf("data.i : %d\n", data.i);
data.f = 220.5;
printf("data.f : %.2f\n", data.f);
strcpy(data.str, "Hello");
printf("data.str : %s\n", data.str);
// 注意:由于联合体成员共享同一块内存,前一个成员的值会被后一个成员覆盖。
// 所以,在最后一次输出时,只有最后赋值的成员数据是有效的。
return 0;
}