登录/注册

结构体数组

更多

在 C 语言中,结构体数组是由相同类型的结构体组成的数组。每个数组元素都是一个结构体,包含多个不同类型的成员(字段)。以下是详细说明和示例:


1. 定义结构体类型

首先定义一个结构体类型:

struct Student {
    int id;          // 学号
    char name[20];   // 姓名
    float score;     // 成绩
};

2. 声明结构体数组

声明一个包含 3 个学生信息的结构体数组:

struct Student stuArray[3];  // 声明一个包含3个元素的数组

3. 初始化结构体数组

初始化数组元素:

// 方式1:声明时整体初始化
struct Student stuArray[3] = {
    {101, "张三", 85.5},  // 第一个元素
    {102, "李四", 92.0},  // 第二个元素
    {103, "王五", 78.5}   // 第三个元素
};

// 方式2:单独初始化某个元素
stuArray[0].id = 101;
strcpy(stuArray[0].name, "张三");  // 字符串需用 strcpy 赋值
stuArray[0].score = 85.5;

4. 访问结构体数组成员

通过下标访问元素,再用 . 运算符访问成员:

printf("学号: %d\n", stuArray[0].id);     // 输出:101
printf("姓名: %s\n", stuArray[0].name);   // 输出:张三
printf("成绩: %.1f\n", stuArray[0].score); // 输出:85.5

5. 遍历结构体数组

用循环遍历所有元素:

for (int i = 0; i < 3; i++) {
    printf("学生 %d: ID=%d, 姓名=%s, 成绩=%.1f\n", 
           i + 1, 
           stuArray[i].id, 
           stuArray[i].name, 
           stuArray[i].score);
}

6. 结构体数组作为函数参数

传递数组到函数:

// 函数定义:打印所有学生信息
void printStudents(struct Student arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("ID: %d, 姓名: %s, 成绩: %.1f\n", 
               arr[i].id, arr[i].name, arr[i].score);
    }
}

// 调用函数
int main() {
    struct Student stuArray[3] = {{101, "张三", 85.5}, {102, "李四", 92.0}, {103, "王五", 78.5}};
    printStudents(stuArray, 3);  // 传递数组和长度
    return 0;
}

关键点总结

特性 说明
内存连续性 所有元素在内存中连续存储(与普通数组相同)。
成员访问 数组名[下标].成员名(如 stuArray[0].id)。
大小计算 数组长度 = sizeof(数组) / sizeof(结构体)
适用场景 存储一组具有相同字段的数据(如学生记录、员工信息等)。

通过结构体数组,可以高效地管理一组具有复杂结构的数据!

C语言中数组结构的内存表示和布局

C语言中,数组和结构体都可以代表一块内存,但为什么结构

2023-08-28 10:54:30

C语言使用结构数组注意事项

一个结构体变量中可以存放一组有关联的数据,如一个学生的学号、姓名、成绩等数据,如果有10个学生的数据需要参加运算,显然应该用数组,这就是

2023-03-10 15:37:32

C程序设计入门笔记之数组结构

数组,结构体和指针是C语言里面最难的部分,如果在编程中可以熟练的运用这三样工具,会大大地提高开发效率,简化程序

2023-03-02 10:13:00

51单片机结构数组1206显示

用51单片机编写结构体数组,用1206显示

资料下载 海纳百川518518 2022-06-06 09:17:37

嵌入式CPU、单片机数组结构体内存溢出问题

嵌入式、单片机等硬件软件开发中,经常会用到结构体或者数组,但是在调试中我们经常会发现数

资料下载 djelje 2021-12-01 15:51:07

Keil使用结构数组的奇怪问题

今天用keil的时候发现一个很奇怪的点,是关于结构体数组的。首先说明我的keil版本是:V5.28.0.0问题是这样的:我在a.h文件定义了一个

资料下载 李艳 2021-11-21 16:36:04

单片机的常量和变量与数组的详细资料说明

本文档的主要内容详细介绍的是单片机的常量和变量与数组的详细资料说明包括了:单片机的常量,单片机的变量,构造类型:数组,构造类型:结构

资料下载 佚名 2019-12-11 17:36:12

单片机的结构和指针等资料说明

本文档的主要内容详细介绍的是单片机的结构体和指针等资料说明包括了:单片机的常量,单片机的变量,构造类型:数组,构造类型:

资料下载 佚名 2019-12-05 17:23:37

C程序设计基础-数组结构

数组,结构体和指针是C语言里面最难的部分,如果在编程中可以熟练的运用这三样工具,会大大地提高开发效率,简化程序

2023-03-02 10:10:22

C语言-学生管理系统(结构+数组实现)

这篇文章就使用结构体知识点完成一个小练习,使用结构体+

2022-08-14 10:07:19

数据结构是什么?数组为什么要有数组

做程序看起来比较乱,用数组来管理会更好管理。譬如 int ages[20];4.1.6.3、数组的优势和缺陷优势:数组比较简单,访问用下标,可以

2022-01-07 08:08:31

Keil使用结构数组的奇怪问题相关资料下载

今天用keil的时候发现一个很奇怪的点,是关于结构体数组的。首先说明我的keil版本是:V5.28.0.0问题是这样的:我在a.h文件定义了一个

2021-11-30 06:47:24

怎样去定义一个结构数组

数据结构的特点有哪些?怎样去定义一个结构体数组呢?

2021-10-14 07:25:19

请问结构数组怎么声明?

试试typedefstruct node{ int date; int next;}linklist;话说哪位老司机解释下,结构体数组怎么声明

2020-07-30 11:42:56

ucosIII邮箱如何发送结构和全局数组?

RT;想要使用ucosIII发送消息,看到能够发送全局数组或者全局结构体,但是自己写的话,发现不能够发送这些数据,想问问有人做过吗?怎么实现

2020-04-08 00:42:33
7天热门专题 换一换
相关标签