4. 结构体数组

结构体类型是使用 struct 关键字声明的自定义数据类型,这种数据类型可以和 C 语言预置的数据类型一样来构成一维数组和多维数组。我们通常使用结构体数组来存储较为复杂的信息。

一维结构体数组定义的语法如下:

struct 结构体名 数组名[整数表达式n] = {{...}, {...}, ...};

说明:

  1. 在数组的初始化列表中,最外层大括号的内部使用 {...} 的初始化列表类初始化数组中结构体的数据。

示例:

下面我们用一维结构体数组来存储 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 位学生的平均年龄。以及最高身高的学生信息。