C 语言自定义数据结构
介绍
在C语言中,数据结构是组织和存储数据的方式。虽然C语言提供了基本的数据类型(如 int
、float
、char
等),但在实际编程中,我们经常需要将多个相关的数据组合在一起,形成更复杂的数据结构。这时,自定义数据结构就派上了用场。
C语言中的自定义数据结构主要包括以下三种:
- 结构体(Struct):用于将不同类型的数据组合在一起。
- 联合体(Union):允许在同一内存位置存储不同的数据类型。
- 枚举类型(Enum):用于定义一组命名的整数常量。
本文将逐步讲解这些概念,并通过代码示例和实际案例帮助你理解它们的应用。
结构体(Struct)
结构体是C语言中最常用的自定义数据结构。它允许你将多个不同类型的数据组合在一起,形成一个新的数据类型。
定义结构体
struct Person {
char name[50];
int age;
float height;
};
在这个例子中,我们定义了一个名为 Person
的结构体,它包含三个成员:name
(字符数组)、age
(整数)和 height
(浮点数)。
使用结构体
定义结构体后,我们可以声明结构体变量并访问其成员:
#include <stdio.h>
struct Person {
char name[50];
int age;
float height;
};
int main() {
struct Person person1;
strcpy(person1.name, "Alice");
person1.age = 25;
person1.height = 1.68;
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);
return 0;
}
输出:
Name: Alice
Age: 25
Height: 1.68
你可以使用 typedef
关键字为结构体定义一个别名,从而简化代码:
typedef struct {
char name[50];
int age;
float height;
} Person;
这样,你可以直接使用 Person
来声明变量,而不需要每次都写 struct Person
。
联合体(Union)
联合体与结构体类似,但它的所有成员共享同一块内存空间。这意味着联合体的大小等于其最大成员的大小。
定义联合体
union Data {
int i;
float f;
char str[20];
};
在这个例子中,Data
联合体包含三个成员:i
(整数)、f
(浮点数)和 str
(字符数组)。它们共享同一块内存。
使用联合体
#include <stdio.h>
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 = 3.14;
printf("data.f: %.2f\n", data.f);
strcpy(data.str, "Hello");
printf("data.str: %s\n", data.str);
return 0;
}
输出:
data.i: 10
data.f: 3.14
data.str: Hello
联合体的成员共享内存,因此修改一个成员的值可能会影响其他成员的值。在使用联合体时,请确保你清楚地知道当前存储的是哪个成员。
枚举类型(Enum)
枚举类型用于定义一组命名的整数常量。它可以使代码更具可读性。
定义枚举类型
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
在这个例子中,Weekday
枚举类型定义了一周的七天,每个枚举常量默认从0开始递增。
使用枚举类型
#include <stdio.h>
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
int main() {
enum Weekday today = Wednesday;
printf("Today is day number: %d\n", today);
return 0;
}
输出:
Today is day number: 2
你可以为枚举常量显式赋值:
enum Weekday {
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
这样,Monday
的值为1,Tuesday
的值为2,依此类推。
实际案例:学生管理系统
让我们通过一个实际案例来展示自定义数据结构的应用。假设我们需要实现一个简单的学生管理系统,存储学生的姓名、年龄和成绩。
#include <stdio.h>
#include <string.h>
typedef struct {
char name[50];
int age;
float score;
} Student;
void printStudent(Student s) {
printf("Name: %s\n", s.name);
printf("Age: %d\n", s.age);
printf("Score: %.2f\n", s.score);
}
int main() {
Student student1;
strcpy(student1.name, "Bob");
student1.age = 20;
student1.score = 88.5;
printStudent(student1);
return 0;
}
输出:
Name: Bob
Age: 20
Score: 88.50
在这个案例中,我们使用结构体 Student
来存储学生的信息,并通过函数 printStudent
打印学生的详细信息。
总结
C语言中的自定义数据结构(结构体、联合体和枚举类型)为我们提供了强大的工具来组织和操作复杂的数据。通过本文的学习,你应该已经掌握了如何定义和使用这些数据结构。
附加资源
练习
- 定义一个结构体
Book
,包含书名、作者和价格。编写一个程序,输入并打印一本书的信息。 - 使用联合体实现一个程序,允许用户输入一个整数或浮点数,并打印其值。
- 定义一个枚举类型
Color
,包含红、绿、蓝三种颜色。编写一个程序,根据用户输入的颜色打印相应的颜色名称。
希望本文对你理解C语言自定义数据结构有所帮助!继续加油学习吧!