博主介绍:夏驰和徐策
博主主页:@夏驰和徐策
所属专栏:夏驰和徐策带你从零开始学C语言
前言
在讲解结构体变量前我们先要拜访拜访我们的的老朋友数据类型,为什么要这样做?过去的知识要常常把它和现在的问题相联系这样你过去总结的知识点和知识框架就能得到进一步的巩固和得到意想不到的新的理解。就像老友只想念不联系,之间的感情就会越来越淡是一样的。话说我找的表情包为啥是想女的,小子你最好是在想老朋友😈。
思维导图(方便读者理解):
一、初识数据类型:
当初博主我作为计算机新生接触到第一个数据类型就是int整型,然后是float单精度型和char字符型,不知道读者是否和我一样刚开始时不知道为什么我们只能在编译器里写这些规定的类型。
其实上述所说的几种常见数据类型都是C语言提供了一些由系统早已定义好的数据类型,用户可以用这些类型在程序中定义变量,解决一般问题。
二、问题的出现
但是随着问题的逐渐复杂,程序辕们开始发现编程逐渐力不从心了。
比如要建立一个班级的花名册册子里包含学生的各项信息,一个学生就包含了学号、性别、姓名、年龄、成绩、家庭住址如果单独定义这些类型使用起来会很不方便
例子:
程序猿们逐渐发现只有系统提供的类型远远不能满足应用的要求,那么该怎么办呢请读者们先思考思考。能否用数组来解决这个问题呢?显然不行,在前面第六章的数组学习中早有提及,因为一个数组中只能存放同一类型的数据为了解决这个问题C语言允许用户根据自己的需要建立一些数据类型,并用它来定义变量,这就是——结构体变量。这个重大的转变就好像在战地五中角色的形象都是提前给好玩家无法更改角色外貌的,现在更新成了像荒野大镖客2中的捏脸系统。
战地5:
荒野大镖客2:
这样就能程序员们就能根据问题的不同灵活的构建(捏出)适合该问题的结构体变量(自己想要的美女,狗头保命),解决问题的效率也就大大提升了。
9.1.1 第一步学会自己建立结构体类型
(1)如何建立结构体类型的例子
例1.根据上述学生信息,构建一个学生的结构体类型
struct Student
{
int num;//学号是字符型
char name[20];//姓名为字符串
char sex;//性别是字符型
int age;//年龄是整型
float score;//成绩为单精度型
char addr[30]//地址为字符串
}; //结构体后面一定要有分号
注意:切记定义结构体是后面一定要有个分号😇。
例一的分析:
相同之处:
上面由程序设计者指定了一个结构体类型struct Student(struct是声明结构体类型时必须使用的关键字,不能省略,否则编译器报错在向你招手),经过上面的指定,struct Student就是一个在本次序中可以使用的合法类型名,他向编译系统声明:这是一个“结构体类型”,它包括了num,name,sex等不同类型的成员。他和系统提供的标准类型(如int,char,float等)具有相似的作用,都可以用来定义变量
不同之处:
不同的是Int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
对例一的小总结:
(1)结构体类型的一般形式(抽象模型):
根据上面的例子我们不难总结出结构体类型的一般形式:
(2)结构体变量的几何意义(直观模型)(本人做的太丑请其他大佬请多指教):
几点说明:
(2)学会结构体的嵌套
简单地说其实结构体的嵌套就好像俄罗斯套娃一样,在结构体中的结构体,比如在上述结构体中对学生的生日进行内容的细分。
反思:
(1)具有相同或类似的概念:
函数的递归
(2)不相同的概念:
请注意函数不能嵌套定义,换句话说就是不能套娃的。
9.1.2 第二步学会如何定义结构体变量
思维导图:
- 先声明结构体类型,再定义该类型的变量
优点:
问题:
请问如果用sizeof测量student1的长度的是多少?
注意:
2.在声明类型的同时定义变量:
优点:
3.不指定类型名而直接定义结构体变量
说明:
9.1.3 第三步学会结构体变量的初始化和引用
在定义结构体变量时可以对他初始化定义,即赋予初始值。
例子:
例9.1:如何输出结构体变量
例题题解(具体的步骤都在里面)
结构体变量的6大特点:
(1)我的理解:
💡特点1:结构体变量花括号直接初始化法——花括号初始化法
该段主要是告诉我(1)结构体花括号直接初始化法(2)结构体变量初始化和结构体类型初始化不是一回事
(2)我的理解:
💡特点2:结构体变量可以引用——点号引用法
这段主要是告诉我(1)可以通过student1.num的方式引用结构体变量其中的值。
(3)我的理解:
💡特点3:结构体变量的嵌套如何引用——层层引用法
这段主要是告诉我(1)如果结构体成员变量也是结构体那么可以用student.birthday.month
(4)我的理解:
💡特点4:结构体变量符合各种运算法则
(5)我的理解:
💡特点5:结构体变量可赋值
(6)我的理解:
💡特点6:结构体变量引用地址的两种方式
例子9.2:
下期预告——使用结构体数组
参考资料:高级程序语言设计、百度百科
苟全性命于CSDN,不求闻达于排名榜,希望无论是各位大佬还是初学者希望大家多多指出我的不足,鄙人一定会虚心接受,并加以改正。如果你也喜欢这篇文章,文章创作不易,小小博主,渴求点赞,点关注,赠人玫瑰,手有余香。