首页 > 编程笔记 > C语言笔记

C语言结构体数组的定义和使用(附带示例)

所谓结构体数组,就是数组中的每个元素都是结构体类型。C语言结构体数组允许我们存储和操作多个相同类型的结构体实例,这种数据结构特别适合用于处理具有相同属性但不同值的多个对象。
 

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

struct 结构体名 数组名[数组大小];

在这个语法中,结构体名是我们之前定义的结构体类型,数组名是我们为这个结构体数组起的名字,而数组大小则指定了数组中结构体元素的数量。


让我们通过一个具体的例子来理解结构体数组的定义和使用。假设我们正在开发一个简单的图书管理系统,需要存储多本书籍的信息。我们可以先定义一个表示书籍的结构体,然后创建这个结构体的数组来存储多本书的信息。

#include <stdio.h>
#include <string.h>

// 定义表示书籍的结构体
struct Book {
    char title[50];
    char author[50];
    int year;
    float price;
};

int main() {
    // 定义一个包含 3 本书的结构体数组
    struct Book library[3];

    // 初始化第一本书的信息
    strcpy(library[0].title, "C 程序设计");
    strcpy(library[0].author, "谭浩强");
    library[0].year = 2012;
    library[0].price = 39.8;

    // 初始化第二本书的信息
    strcpy(library[1].title, "数据结构");
    strcpy(library[1].author, "严蔚敏");
    library[1].year = 2008;
    library[1].price = 35.0;

    // 初始化第三本书的信息
    strcpy(library[2].title, "计算机网络");
    strcpy(library[2].author, "谢希仁");
    library[2].year = 2017;
    library[2].price = 49.0;

    // 打印所有书籍的信息
    for (int i = 0; i < 3; i++) {
        printf("书名:%s\n", library[i].title);
        printf("作者:%s\n", library[i].author);
        printf("出版年份:%d\n", library[i].year);
        printf("价格:%.2f\n\n", library[i].price);
    }

    return 0;
}

在这个例子中,我们首先定义了一个名为 Book 的结构体,用于存储书籍的标题、作者、出版年份和价格。然后,我们在 main 函数中创建了一个包含 3 个 Book 结构体的数组 library。
 

接下来,我们使用数组索引和点运算符来访问每个结构体元素的成员,并为它们赋值。需要注意的是,对于字符数组成员(如 title 和 author),我们使用 strcpy 函数来复制字符串,而不是直接赋值。这是因为在C语言中,字符数组不能直接用赋值运算符进行赋值。
 

最后,我们使用一个 for 循环遍历整个结构体数组,打印出每本书的信息。这个例子展示了如何定义、初始化和访问结构体数组的元素。


运行这段代码,我们将得到如下输出:

书名:C 程序设计
作者:谭浩强
出版年份:2012
价格:39.80

书名:数据结构
作者:严蔚敏
出版年份:2008
价格:35.00

书名:计算机网络
作者:谢希仁
出版年份:2017
价格:49.00

结构体数组不仅可以用于存储同类对象的集合,还可以方便地进行批量操作和数据处理。例如,我们可以轻松地实现按特定条件查找书籍、对书籍进行排序、计算平均价格等功能。
 

在实际应用中,结构体数组的大小通常不是固定的,我们可以使用动态内存分配函数(如 malloc)来创建可变大小的结构体数组,这样就可以根据实际需求来调整数组的大小。此外,当结构体成员包含指针时,我们需要特别注意内存的分配和释放,以避免内存泄漏。

相关文章