1.结构体简介
在日常使用中我们很多时候需要处理大量数据,为了更加规整数据,编程语言为我们提供了结构体,他可以让我们处理数据时候更加规整,逻辑更加清晰。比如我们的学生管理系统,库存管理系统........这里都可以使用我们的结构体来让我们的数据看起来更加整齐。
结构体本质上还是一个变量,我们建立的结构体就是一种数据结构。比如我们的学生管理系统,我们需要学号,姓名,成绩,等等属性,这时候我们就可以建立一个和学生有关的结构体来把这些变量放到结构体,来处理数据。会显得十分高效。
再具体开始之前,日常求个三联。写作不易,给读者老板跪了。QAQ
2.结构体的含义
我们先来理解一下什么是结构体,不需要看懂代码,我们先捋清我们的逻辑关系
struct student{ int id; char name[100]; int num[2]; }stu[2];
这是一个名字叫做student的结构体,包含了id,name,num这三个元素,其中id为整型,然后name是一个字符串类型的数组,num是一个整型数组。最后的stu[2]就是我们的结构体数组。
这里来类比下excl表格来让各位能更加捋清楚关系。众所周知,数组可以理解成表格所以我绘制如下表格来帮助给理解
student
结构体数组 | id | name | num[ 0 ] | num[ 1 ] |
stu[0] | 1 | 张三 | 99 | 80 |
stu[1] | 2 | 李四 | 98 | 70 |
通过上表我们可以清楚的看出,我们的结构体数组是专门负责控制我们的数据行,而我们的结构体内的各个数据在应用上都和普通的应用是相同的。相信聪明的你已经看出了端倪,我们实际上就是构建了一个名叫student的表然后通过结构体数组来调整我们的数据行。你读到这里恭喜你已经基本了解结构体了,这也是最关键的一步。放个初音镇楼QWQ
3.结构体的语法
现在你已经有了对结构体的逻辑关系了,下面就要学会去使用它了。
3.1创建一个简单结构体
在创建一个结构体时,我们使用到关键字struct来进行创建其格式如下:
struct 结构体名字{ 结构体对象 }结构体数组;
各位要注意的是在结构体的最后一个花括号需要有分号结尾,这样才是整个语句闭合。
这里我们使用该方法创建一个结构体以便后期讲解使用代码如下:
struct student{ int id; char name[100]; int num[4]; }stu[2];
3.2给结构体赋值
各位谨记一句话,结构体就是变量。所以在使用时候和变量没有区别。这里我没有涉及在程序内部给结构体赋值,我直接采用了传参的方法来对结构体进行赋值。
结构体变量的调用格式为:结构体数组.结构体对象。 既然涉及到了数组,我们自然而然的想到了for循环,这里是一段伪代码,并未考虑到结构体对象存在数组的形式。
for ( i = 0; i < count; i++) //只对这一行数据进行遍历 { scanf("%d",&stu[i].id); }
没错就是这么简单,这个例子是针对结构体内部为常量的情况进行赋值的
接下来这个例子就是对我们结构体内部存在数组的情况进行赋值。
显而易见,我们使用两个for循环,分别用来控制我们的结构体数组和我们的结构体对象的数组,这里的应用和我们的二维数组是类似的。
for ( i = 0; i < count; i++) //控制我们的结构体数组 { for (size_t n = 0; n < count; n++)//控制我们的内部数组 { scanf("%d",&stu[i].id[n]); } }
这里进行一个小节:结构体数组用于控制我们的具体数据行标,我们真正存的东西是在我们的结构体内部,而最开始的那个,仅仅只是我们起了一个名字罢了,对我们的程序执行不会产生影响。
3.3结构体的打印
正所谓输出与输入相对,我们在打印结构体数据时候只需要把函数更换成printf即可完成,这里为了节省篇幅就不过多赘述,如果有问题可以在评论区提问。
4.结构体扩展内容
有人可能会好奇不同的结构体数组是否是指同一组数据呢?这里我先卖个关子,先看笔者的实验数据。
实验结果表明,我们重现创建的结构体数组s_t我们对其中元素进行赋值并没有影响到我们的结构体数组中的stu数组。由此可见,不同结构体数组是各自独立的,结构体仅仅是一个模板。
5.结尾彩蛋
看到这里相信各位已经能基本使用结构体了,笔者这里为大家准备了一个和结构体有关的小题目供大家练练手。题目解析的传送门======》》》》奖学金之结构体排序
呼两个小时终于写完了,都看到结尾了,求个一键三连不过分吧QWQ