C语言结构体数组的定义和使用
C语言中的结构体数组将结构体和数组的概念结合在一起,使我们能够创建和管理多个相同类型的结构体。
结构体数组的定义
在C语言中,定义结构体数组的语法与定义普通数组类似,只不过数组的元素类型是结构体。以下是定义结构体数组的基本格式:
struct 结构体名 数组名[数组大小];
让我们通过一个具体的例子来说明结构体数组的定义。假设我们要创建一个存储学生信息的结构体数组:
#include <stdio.h> #include <string.h> #define MAX_STUDENTS 3 struct Student { char name[50]; int age; float gpa; }; int main() { struct Student students[MAX_STUDENTS]; // 后续代码将在这里继续... return 0; }
在上面的代码中,我们定义了一个名为 Student 的结构体,包含姓名、年龄和平均成绩三个成员。然后,我们创建了一个名为 students 的结构体数组,可以存储最多 3 个学生的信息。
结构体数组的初始化
结构体数组可以在定义时进行初始化,也可以在后续的代码中逐个赋值。
定义时初始化
struct Student students[MAX_STUDENTS] = { {"Alice", 20, 3.8}, {"Bob", 22, 3.5}, {"Charlie", 21, 3.9} };
逐个赋值
// 继续上面的 main 函数 strcpy(students[0].name, "Alice"); students[0].age = 20; students[0].gpa = 3.8; strcpy(students[1].name, "Bob"); students[1].age = 22; students[1].gpa = 3.5; strcpy(students[2].name, "Charlie"); students[2].age = 21; students[2].gpa = 3.9;
注意,当给字符数组成员赋值时,我们使用 strcpy 函数而不是直接赋值,这是因为字符数组不能直接用等号赋值。
访问结构体数组元素
访问结构体数组的元素与访问普通数组类似,只需使用数组索引即可。要访问结构体成员,我们使用点运算符.
。以下是一个遍历并打印结构体数组的例子:
for (int i = 0; i < MAX_STUDENTS; i++) { printf("Student %d:\n", i + 1); printf("Name: %s\n", students[i].name); printf("Age: %d\n", students[i].age); printf("GPA: %.2f\n\n", students[i].gpa); }
结构体数组作为函数参数
结构体数组可以作为函数参数传递,这使得我们能够在不同的函数中处理结构体数组。通常,我们会传递数组的首地址和数组的大小。下面是一个示例函数,用于计算所有学生的平均 GPA:
float calculateAverageGPA(struct Student *students, int size) { float totalGPA = 0; for (int i = 0; i < size; i++) { totalGPA += students[i].gpa; } return totalGPA / size; } // 在 main 函数中调用 float avgGPA = calculateAverageGPA(students, MAX_STUDENTS); printf("Average GPA: %.2f\n", avgGPA);
完整示例
让我们把所有的概念整合在一起,创建一个完整的程序示例:
#include <stdio.h> #include <string.h> #define MAX_STUDENTS 3 struct Student { char name[50]; int age; float gpa; }; float calculateAverageGPA(struct Student *students, int size) { float totalGPA = 0; for (int i = 0; i < size; i++) { totalGPA += students[i].gpa; } return totalGPA / size; } int main() { struct Student students[MAX_STUDENTS]; // 初始化学生信息 strcpy(students[0].name, "Alice"); students[0].age = 20; students[0].gpa = 3.8; strcpy(students[1].name, "Bob"); students[1].age = 22; students[1].gpa = 3.5; strcpy(students[2].name, "Charlie"); students[2].age = 21; students[2].gpa = 3.9; // 打印学生信息 for (int i = 0; i < MAX_STUDENTS; i++) { printf("Student %d:\n", i + 1); printf("Name: %s\n", students[i].name); printf("Age: %d\n", students[i].age); printf("GPA: %.2f\n\n", students[i].gpa); } // 计算并打印平均 GPA float avgGPA = calculateAverageGPA(students, MAX_STUDENTS); printf("Average GPA: %.2f\n", avgGPA); return 0; }
这个程序展示了结构体数组的定义、初始化、访问和作为函数参数传递的全过程。运行这个程序,你将看到每个学生的信息以及所有学生的平均 GPA,如下所示:
Student 1: Name: Alice Age: 20 GPA: 3.80 Student 2: Name: Bob Age: 22 GPA: 3.50 Student 3: Name: Charlie Age: 21 GPA: 3.90 Average GPA: 3.73
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。