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)来创建可变大小的结构体数组,这样就可以根据实际需求来调整数组的大小。此外,当结构体成员包含指针时,我们需要特别注意内存的分配和释放,以避免内存泄漏。