在 C 语言中,结构体数组本质上是一个数组,它的每一个元素相当于一个结构体变量。结构体数组和结构体变量之间的区别,与数组和变量之间的区别是一样的,小伙伴们可以对比理解一下。
一个结构体变量只能存放一条数据(比如一个学生的信息),如果想要存放多条数据(比如多个学生的信息),应该怎么办呢?此时就可以使用 “结构体数组” 来实现。
示例 1:C 使用结构体数组
下面例子将先定义一个结构体数组,然后再尝试访问成员的值。
#include <stdio.h>
// 定义一个结构体类型
struct Student
{
int id; // 学号
char name[10]; // 姓名
char gender; // 性别,'m' 表示男,'f' 表示女
int age; // 年龄
};
int main(void)
{
// 定义一个结构体数组
struct Student stuArr[3] = {
{1001, "Jack", 'm', 20},
{1002, "Lucy", 'f', 21},
{1003, "Tony", 'm', 19}
};
// 获取成员的值
printf("Jack 的学号:%d\n", stuArr[0].id);
printf("Lucy 的学号:%d\n", stuArr[1].id);
printf("Tony 的学号:%d", stuArr[2].id);
return 0;
}运行结果如下。
Jack 的学号:1001
Lucy 的学号:1002
Tony 的学号:1003分析:
结构体数组本质上是一个数组,所以我们可以使用下标的方式来获取它的某一个元素。对于结构体数组的定义,下面 2 种方式是等价的。
// 方式 1
struct Student stuArr[3] = {
{1001, "Jack", 'm', 20},
{1002, "Lucy", 'f', 21},
{1003, "Tony", 'm', 19}
};
// 方式 2
struct Student stuArr[3] = {
1001, "Jack", 'm', 20,
1002, "Lucy", 'f', 21,
1003, "Tony", 'm', 19
};方式 2 虽然合法,但一旦结构体成员顺序改变,数据很容易错位,因此我们强烈建议使用方式 1。
示例 2:C 遍历结构体数组
在 C 语言中,我们可以使用循环(比如 for 循环、while 循环)来遍历结构体数组。
#include <stdio.h>
// 定义结构体类型
struct Student
{
int id; // 学号
char name[10]; // 姓名
char gender; // 性别,'m' 表示男,'f' 表示女
int age; // 年龄
};
int main(void)
{
// 定义一个结构体数组
struct Student stuArr[3] = {
{1001, "Jack", 'm', 20},
{1002, "Lucy", 'f', 21},
{1003, "Tony", 'm', 19}
};
for (int i = 0; i < 3; i++)
{
printf("%s\n", stuArr[i].name);
}
return 0;
}运行结果如下。
Jack
Lucy
Tony分析:
这里我们使用一个 for 循环来把每一个学生的名字遍历出来,stuArr[i] 表示获取某一个学生所有信息,然后 stuArr[i].name 表示获取该学生的 name 成员。
此外对于结构体数组的初始化,它的下标是可以省略的,因为系统会自动根据后面的数据确定数组的长度,这一点和普通数组一样。其中,下面 2 种方式是等价的。
// 方式 1
struct Student stuArr[3] = {
{1001, "Jack", 'm', 20},
{1002, "Lucy", 'f', 21},
{1003, "Tony", 'm', 19}
};
// 方式 2
struct Student stuArr[] = {
{1001, "Jack", 'm', 20},
{1002, "Lucy", 'f', 21},
{1003, "Tony", 'm', 19}
};示例 3:C 获取结构体数组的长度
在 C 语言中,想要获取结构体数组的长度,我们同样可以使用 sizeof() 函数来实现。
#include <stdio.h>
// 定义结构体类型
struct Student
{
int id; // 学号
char name[10]; // 姓名
char gender; // 性别,'m' 表示男,'f' 表示女
int age; // 年龄
};
int main(void)
{
// 定义一个结构体数组
struct Student stuArr[] = {
{1001, "Jack", 'm', 20},
{1002, "Lucy", 'f', 21},
{1003, "Tony", 'm', 19}
};
int length = sizeof(stuArr) / sizeof(stuArr[0]);
printf("%d", length);
return 0;
}运行结果如下。
3分析:
既然是一个数组,我们就可以使用之前的 sizeof() 函数这种方式来获取结构体数组的长度了。
