当前位置:首页 » 《资源分享》 » 正文

【C语言】结构体类型的数组和指针(干货满满,建议收藏!!!)

21 人参与  2024年10月30日 16:01  分类 : 《资源分享》  评论

点击全文阅读


结构体数组

前言1、结构体类型数组的定义与初始化1.1结构体数组的定义1.2结构体数组初始化 2、结构体数组的应用3、结构体指针指向结构体数组

这篇文章将讲述结构体类型的数组的定义、初始化、应用和结构体指针的使用。还会扩展scanf_s函数相关知识。

前言

一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、性别、成绩、地址等数据)。如果有 20个学生的数据需要处理,应该用数组,但是普通的数组显然不能处理怎么复杂的问题,这时就需要结构体类型的数组了。结构体数组与数值型数组的不同之处在于每个数组元素都是一个结构体类型的数据,结构体数组的每个元素都包含了结构体中的每个成员。

结构体基本知识:https://editor.csdn.net/md/?articleId=139336546

1、结构体类型数组的定义与初始化

1.1结构体数组的定义

方式一:struct 结构体类型名 数组名[数组大小];

//结构体声明struct Student{char id[20];//学号char name[10];int age;float score;};int main(){struct Student class1[20];//定义结构体数组,表示班级1有20个学生return 0;}

方式二:在声明结构体时定义一个结构体数组

struct Student{char id[20];//学号char name[10];int age;float score;}class1[20];int main(){return 0;}

1.2结构体数组初始化

方式:struct Student class1[20] = { 初始值列表 };
如:struct Student class1[2] = { "20242356","小敏",18,88.9,"20242345","小鹤",19,85.9 };

//结构体声明struct Student{char id[20];//学号char name[10];int age;float score;};int main(){//定义结构体数组并初始化,表示班级1有2个学生struct Student class1[2] = { "20242356","小敏",18,88.9,"20242345","小鹤",19,85.9 };return 0;}

2、结构体数组的应用

现在有 3 个候选人准备当选学生会部长,每个学生会成员只能投票选一人,有学生会有5个成员,先后输入被选人的名字,最后输出各人得票结果。

// 结构体声明struct Student{char name[20];int count;};int main(){struct Student leader[2] = { "小明", 0, "小夏", 0 };//初始化char leader_name[20];//用来存放成员投票候选人的名字//成员输入自己要投的候选人printf("开始投票:\n");for (int i = 0; i < 5; i++){scanf_s("%s", leader_name, 20);for (int j = 0; j < 2; j++){if (strcmp(leader_name, leader[j].name) == 0){leader[j].count++;}}}printf("投票结果:\n");for (int i = 0; i < 2; i++){printf("%s:%d\n", leader[i].name, leader[i].count);}return 0;}

输出结果:
在这里插入图片描述

分析:定义一个结构体数组 leader,它有2 个元素,每一个元素包含两个成员 name(候选人)和 count(票数)。在定义结构体数组时使之初始化,让两个候选人的票数为0。在主函数中定义字符数组 leader_name,用来存放成员选的被选人的姓名。在每次循环中输入一个被选人姓名,然后把它与结构体数组中2 个候选人姓名相比,看它和哪一个候选人的名字相同。相同的就票数+1,在输入和统计结束之后,将 2人的名字和得票数输出。
扩展:scanf_s()函数解析
形式:int scanf_s(const char *format, ...);
scanf_s是C和C ++编程语言中的格式化输入函数。它通常用于从标准输入流(通常是键盘)读取数据,并根据指定的格式将其存储在变量中。后缀_s代表“安全”,旨在帮助防止某些类型的安全漏洞,如缓冲区溢出。scanf_s函数类似于scanf,但它包括额外的参数,用于指定某些类型输入操作的最大字符数,例如对于字符串的%s。这有助于防止缓冲区溢出,即读取太多数据进入缓冲区并覆盖相邻内存的情况。
列如:上述代码中的scanf_s("%s", leader_name, 20);第三个参数指限定输入的字符串大小。20,表示只能输入19个字符,最后一个是“\0”。

3、结构体指针指向结构体数组

结构体指针的定义:
结构体指针就是指向结构体变量(或结构体数组)的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存放在一个指针变量中,那么,这个指针变量就指向该结构体变量。
使用:
(1)指向结构体变量的结构体指针用法:

(*p).成员名p->成员名

代码展示:

struct Student{char name[20];float score;};int main(){struct  Student s1 = { "小新",89.5 };struct Student* p = &s1;printf("name:%s score:%.1f\n",p->name, p->score);printf("name:%s score:%.1f\n",(*p).name, (*p).score);return 0;}

输出结果:
在这里插入图片描述

(2)指向结构体数组的指针:
有 3 个学生的成绩,放在结构体数组中,要求输出全部学生的成绩。

struct Student{char name[20];float score;};int main(){//定义结构体数组并初始化struct Student stu[3] = { {"Li Ming" ,88.5},{"Zhang San" ,78.5},{"Wang Wu",91.5} };//定义指向struct Student结构体变量的指针变量struct Student* p;for (p = stu; p < stu + 3; p++){printf("%-10s: %.1f\n", p->name, p->score);}return 0;}

输出结果:
在这里插入图片描述
总结: 结构体类型的数组是为处理现实生活中复杂的问题,让复杂的问题更加简单和高效,如在处理群众选举候选人,学生成绩的录入等等。

那么写到这里,本节内容就结束了,这篇博客花费了很长时间,但写完有满满的成就感,希望能帮助到大家,如果文章有不足的地方,欢迎在评论区留言指正,我们一起学习交流! 希望能得到大家的关注、点赞、评论、收藏! 你的支持是我最大的动力!!


点击全文阅读


本文链接:http://zhangshiyu.com/post/180063.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1