C 结构体数组

在 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() 函数这种方式来获取结构体数组的长度了。

上一篇: C 结构体

下一篇: C 结构体指针

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号