29 结构体与共用体之结构体的定义与使用
在前一篇文章中,我们探讨了指针之指针及其在函数中的使用,接下来我们将深入了解 结构体
的定义与使用。结构体
是 C 语言中一种用户定义的数据类型,它允许将不同类型的数据组合在一起。结构体在开发中非常有用,尤其是在需要将相关数据组织在一起时。
1. 结构体的定义
结构体的定义使用 struct
关键字,基本语法如下:
struct 结构体名称 {
数据类型 成员名1;
数据类型 成员名2;
// 可添加更多成员
};
1.1 示例:定义一个学生结构体
我们来定义一个简单的学生结构体,包含学生的姓名、年龄和成绩:
struct Student {
char name[50]; // 学生姓名
int age; // 学生年龄
float score; // 学生成绩
};
在这个定义中:
struct Student
是结构体的名称。char name[50]
表示姓名是一个字符数组,最多可以存储 49 个字符(加上结束符)。int age
用于存储学生的年龄。float score
用于存储学生的成绩。
2. 结构体的变量声明
在定义了结构体后,我们可以声明结构体类型的变量。可以使用两种方式来声明变量:
2.1 单个变量声明
struct Student s1; // 声明一个 Student 结构体变量 s1
2.2 多个变量声明
struct Student s1, s2; // 同时声明多个 Student 结构体变量
3. 结构体成员的访问
访问结构体的成员使用 .
运算符。例如,可以通过以下方式访问 s1
结构体变量的成员:
strcpy(s1.name, "Alice"); // 赋值姓名
s1.age = 20; // 赋值年龄
s1.score = 85.5; // 赋值成绩
strcpy
函数用于字符串拷贝,需要包含 string.h
头文件。
示例:打印学生信息
下面是一个简单的函数,用于打印学生的信息:
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float score;
};
void printStudent(struct Student s) {
printf("Name: %s\n", s.name);
printf("Age: %d\n", s.age);
printf("Score: %.2f\n", s.score);
}
int main() {
struct Student s1;
strcpy(s1.name, "Alice");
s1.age = 20;
s1.score = 85.5;
printStudent(s1);
return 0;
}
在这个例子中,我们定义了一个 printStudent
函数来打印学生的详细信息。程序输出如下:
Name: Alice
Age: 20
Score: 85.50
4. 结构体数组
结构体
也可以用于创建一个结构体数组,这在需要处理多个相似对象时特别有用。
示例:定义学生数组
struct Student students[3]; // 定义一个包含 3 个学生信息的数组
// 初始化数组
strcpy(students[0].name, "Alice");
students[0].age = 20;
students[0].score = 85.5;
strcpy(students[1].name, "Bob");
students[1].age = 22;
students[1].score = 90.0;
strcpy(students[2].name, "Charlie");
students[2].age = 21;
students[2].score = 88.5;
// 打印所有学生信息
for(int i = 0; i < 3; i++) {
printStudent(students[i]);
}
5. 嵌套结构体
一个结构体的成员可以是另一个结构体,这被称为嵌套结构体。
示例:定义课程结构体
struct Course {
char title[50]; // 课程标题
int creditHours; // 学分
};
struct Student {
char name[50];
int age;
float score;
struct Course course; // 嵌套的结构体
};
总结
在本节中,我们学习了 结构体
的定义与使用,包括如何声明结构体、访问结构体的成员、使用结构体数组以及嵌套结构体的基本概念。这些知识对后续内容,特别是结构体的 共用体
使用将为我们打下良好的基础。
接下来,我们将探索 共用体
的定义与使用,了解如何使用这个特殊的数据结构来节省内存。