4. 结构体数组
结构体类型是使用 struct 关键字声明的自定义数据类型,这种数据类型可以和 C 语言预置的数据类型一样来构成一维数组和多维数组。我们通常使用结构体数组来存储较为复杂的信息。
一维结构体数组定义的语法如下:
struct 结构体名 数组名[整数表达式n] = {{...}, {...}, ...};
说明:
- 在数组的初始化列表中,最外层大括号的内部使用
{...}的初始化列表类初始化数组中结构体的数据。
示例:
下面我们用一维结构体数组来存储 100 个学生信息。
// filename: struct_array.c
#include <stdio.h>
struct student {
char name[32]; // 姓名
int age; // 年龄
float height; // 身高
};
int main(int argc, char * argv[]) {
struct student class1[100] = {
{"zhang san", 18, 1.73},
{.age = 19, .height = 1.80, .name = "li si"}
};
class1[2] = (struct student){"wang wu", 12, 1.41};
for (int i = 0; i < 3; i++) {
printf("姓名: %s, 年龄: %d, 身高: %.2f\n",
class1[i].name, class1[i].age, class1[i].height);
}
return 0;
}
编译和运行结果如下
weimingze@mzstudio:~$ gcc -o struct_array struct_array.c
weimingze@mzstudio:~$ ./struct_array
姓名: zhang san, 年龄: 18, 身高: 1.73
姓名: li si, 年龄: 19, 身高: 1.80
姓名: wang wu, 年龄: 12, 身高: 1.41
可见,一维的结构体数组和一维内建数据类型的数组没有区别,同样我们也可以使用结构体创建二维及以上维度的数组。
练习:
使用上述结构体数组,读取 5 个学生信息,计算并打印出这 5 位学生的平均年龄。以及最高身高的学生信息。