9.2 【C语言】使用结构体数组

简介: 9.2 【C语言】使用结构体数组

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


9.2.1 定义结构体数组

例9.3 有三个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

编写程序:

#include<string.h>
#include<stdio.h>
struct Person{
    char name[20];   //候选人名字
    int count;     //候选人得票数
}leader[3]={"Li",0,"zhang",0,"sun",0};
int main(){
    int i,j;
    char leader_name[20];    //定义字符数组
    for(i=1;i<=10;i++){
        scanf("%s",leader_name);
        for(j=0;j<3;j++)
          if(strcmp(leader_name,leader[j]).name)==0)leader[j].count++;    
    }
    printf("\nResult:\n");
    for(i=0;i<3;i++)
        printf("%5:%d\n",leader[i].name,leader[i].count);
        return 0;
}

(1)定义结构体数组一般形式是


1.struct结构体名


{成员表列} 数组名[数组长度];


2.先声明一个结构体类型,然后再用此类型定义结构体数组:


结构体类型 数组名[数组长度];


struct Person leader[3]; //leader是结构体数组名


(2)对结构体数组初始化的形式是在定义数组的后面加上:


={数组表列};


比如:struct Person leader[3]={"Li",0,"zhang",0,"sun",0};

9.2.2 结构体数组的应用举例

if(stu[j].score>stu[k].score)    //进行成绩的比较
k=j;
temp=stu[k];stu[k]=stu[i];stu[i]=temp;   //stu[k]和stu[i]元素互换

9.3 结构体指针

所谓结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。

9.3.1 指向结构体变量的指针

指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。

例9.5 通过指向结构体变量的指针变量输出结构体变量中成员的信息

解题思路:

(1)怎样对结构体变量成员赋值

(2)怎样通过结构体变量的指针访问结构体变量中成员

#include<stdio.h>
#include<string.h>
int main(){
    struct Student      //声明结构体类型struct Student
    {long num;
    char name[20];
    char sex;
    float score;};
    struct Student stu_1;
    struct Student *p;
    p=&stu_1;   //p指向stu_1
    stu_1.num=10101;
    strcpy(stu_1,name,"li min");
    stu_1.sex='M';
    stu_1.score=89.5;
    printf("no.:%ld\nname:%s\nsex:%c\nscore:%5.lf\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
    return 0;
}

9.3.2 指向结构体数组的指针

可以用指针变量指向结构体数组的元素。


例9.6 有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。


解题思路:用指向结构体变量的指针来处理。

(1)声明结构体类型struct Student,并定义结构体数组,同时使之初始化。

(2)定义一个指向struct Student类型数据的指针变量p;

(3)使p指向结构体数组的首元素,输出它指向的元素中的有关信息;

(4)使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息;

(5)再使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息。

编写程序:

#include<stdio.h>
struct Student{
    int num;
    char name[20];
    char sex;
    int age;
};
struct Student stu[3]={{10101,"li lin",'m',18},{10102,"zhang zhi",'m',19},{10103,"zhang san",'f',20}}  //定义结构体数组并初始化
int main(){
    struct Student *p;   //定义指向struct Student结构体变量的指针变量
    printf("no.name    sex age\n");
    for(p=stu;p<stu+3;p++)
        printf("%5d %-20s %2c %4d\n",p->num,p->name,p->sex,p->age);
        return 0;
}

9.3.3 用结构体变量和结构体变量的指针作函数参数

将一个结构体变量的值传递给另一个函数,有三个办法:


(1)用结构体变量的成员作参数。例如,用stu[1].num或stu[2].name作函数实参,将实参值传给形参。

(2)用结构体变量作实参。

(3)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。


相关文章
|
26天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
120 14
|
30天前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
133 10
|
30天前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
88 6
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
68 5
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
147 13
|
2月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
69 11
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。