系列目录
在本节中,我们将探讨C语言中的结构体、联合体和枚举类型。结构体和联合体都是用于组合不同数据类型的自定义数据类型,而枚举类型用于定义具有命名常量的变量。
结构体定义与使用
结构体是将多个不同类型的数据组合在一起的自定义数据类型。它允许我们将相关数据聚合在一起进行操作。
结构体的定义
使用 ‘struct‘ 关键字定义结构体。以下是一个简单的结构体定义示例:
struct Person {
char name[50];
int age;
float height;
};
结构体变量的声明与初始化
可以使用定义的结构体类型声明变量,并通过点操作符(‘.‘)访问结构体成员,例如:
struct Person person1;
person1.age = 25;
person1.height = 175.5;
strcpy(person1.name, "John Doe");
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);
结构体数组
结构体数组用于存储相同类型的多个结构体变量,例如:
struct Person people[3] = {
{"Alice", 30, 165.0},
{"Bob", 22, 180.0},
{"Charlie", 28, 170.0}
};
for (int i = 0; i < 3; i++) {
printf("Name: %s, Age: %d, Height: %.2f\n", people[i].name, people[i].age, people[i].height);
}
结构体指针
可以使用指针访问结构体成员:
struct Person *p = &person1;
p->age = 26;
printf("Updated Age: %d\n", p->age);
联合体的定义与使用
联合体(union)与结构体类似,但它的成员共享同一段内存。联合体的大小由最大成员的大小决定。
联合体的定义
使用 ‘union‘ 关键字定义联合体,例如:
union Data {
int intVal;
float floatVal;
char charVal;
};
联合体变量的声明与使用
可以声明联合体变量,并访问其成员,例如:
union Data data;
data.intVal = 10;
printf("intVal: %d\n", data.intVal);
data.floatVal = 220.5;
printf("floatVal: %.2f\n", data.floatVal);
data.charVal = 'A';
printf("charVal: %c\n", data.charVal);
由于联合体的成员共享内存,所以修改一个成员的值会覆盖其他成员的值。
枚举类型
枚举类型(enum)用于定义具有命名常量的变量,提供更具可读性的代码。
枚举类型的定义
使用 ‘enum‘ 关键字定义枚举类型,例如:
enum Weekday {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
枚举变量的声明与使用
可以声明枚举变量,并赋值为枚举类型中的常量,例如:
enum Weekday today;
today = Wednesday;
printf("Day: %d\n", today); // 输出3,因为枚举常量的默认值从0开始依次递增
自定义枚举常量值
可以为枚举常量指定具体的值,例如:
enum Color {
Red = 1,
Green = 3,
Blue = 5
};
enum Color favoriteColor = Green;
printf("Favorite color: %d\n", favoriteColor); // 输出3
示例代码
以下是一个综合示例,展示了结构体、联合体和枚举类型的定义与使用:
#include <stdio.h>
#include <string.h>
// 结构体定义
struct Person {
char name[50];
int age;
float height;
};
// 联合体定义
union Data {
int intVal;
float floatVal;
char charVal;
};
// 枚举类型定义
enum Weekday {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
int main() {
// 结构体变量声明与初始化
struct Person person1;
strcpy(person1.name, "John Doe");
person1.age = 25;
person1.height = 175.5;
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);
// 联合体变量声明与使用
union Data data;
data.intVal = 10;
printf("intVal: %d\n", data.intVal);
data.floatVal = 220.5;
printf("floatVal: %.2f\n", data.floatVal);
data.charVal = 'A';
printf("charVal: %c\n", data.charVal);
// 枚举类型变量声明与使用
enum Weekday today;
today = Wednesday;
printf("Day: %d\n", today);
return 0;
}
总结
通过本节的学习,你已经了解了C语言中的结构体、联合体和枚举类型的基本概念和使用方法。结构体用于将不同类型的数据组合在一起,联合体允许不同类型的数据共享同一段内存,而枚举类型提供了定义命名常量的便捷方式。这些数据类型在实际编程中广泛应用,能够帮助我们更好地组织和管理数据。在接下来的章节中,我们将继续深入探讨C语言中的高级主题,进一步提升编程技能。
下一篇:白骑士的C语言教学进阶篇 2.4 文件操作