| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 结构体、联合、枚举等数据处理形式 -> 正文阅读 |
|
[数据结构与算法]结构体、联合、枚举等数据处理形式 |
本篇的初衷原本是想要写链表前提一嘴结构体...结果越提越多(emm,写完发现篇幅已经很大了。 所以链表会另开一篇博客,本篇主要探讨数据的一些巧妙处理方式。 目录 ?一、结构体在说链表前提一下结构体,因为结构体相当于一种数据类型,而我们可以使用结构体来实现链表操作(下篇讲)。 1.1结构体的概念有时候我们需要一个宏观的结构去包罗万象,比如想要建立一个班级成员信息表,里面包括每个人的姓名、性别、家庭住址、出身年月等等,你会发现这些信息如果想要存储在计算机中,他们的数据类型都不一样,并且我们也不希望一个个去定义具体每一项的数据类型。那么这时候结构体就派上用场了。 结构体是一种即能包含数字又能包含字符串的数据结构,并且每个数据之间能够做到包含在一个结构中却又相互独立。不太严谨地说,其实结构体类似于一个“超级数组”。 1.2 结构体的声明
这是一个由一个int类型变量、一个float类型变量和一个字符数组组成的结构。该声明实际上是创建了一个名为struct A的新类型,而它没有创建实际的数据对象,只是描述了该对象由什么组成。 记得结构体声明需要放在每段代码int main()前,并且记得花括号后的“ ;”(它表示结构局部定义结束)。 其中重点介绍一下关键字“struct”。它声明了一个结构体,后跟为一个可选的结构体标记(例中为A)。 当然,你也可以选择不带标记,像这样的匿名形式:
然而如果你打算多次使用这个结构模板,就要使用带标记的形式。 1.3 创建结构变量以及初始化结构格式为: struct A book; 它把book声明为一个使用A结构布局的结构变量。 如果你想声明三个这个结构的变量,你就可以: struct A book, ptbook, *pt; 直接在后面接就好。看,你不仅可以声明变量,你还可以声明指向结构的指针。 关于结构体的初始化,为下面操作:
很简单的初始化操作方法,在这里不多描述。 1.4 访问结构成员的两个运算符:->和.
关于对结构体内部成员的访问,我们使用(. )运算符来完成。(注意:.运算符只能跟在结构后面) 比如 A.B ,就是访问结构A中的B部分。因此我们也可以有类似于这样的操作:
如果你想进一步初始化结构中指定的成员,就可以使用点运算符+成员名:
再者就是当你想要用指针访问结构成员时,可以使用( -> ) 来完成。
由此看来两个运算符的工作方式都是 获取结构地址时,必须使用&运算符。和数组名不同,结构变量名不是其地址的别名。 1.5 结构数组关于结构数组,要注意的点是其声明: struct A book[ 10 ]; 注意book此时是数组名而不是结构名,它表示该数组中的每个元素都是struct A类型的结构变量。 同时注意数组元素下标应该跟在book后面而不是成员名后面:
?1.6 伸缩型数组成员(C99)我对于伸缩型数组成员的用法理解是更具有弹性空间,反复使用能够更加灵活。 下面是关于伸缩型数组成员的一些规则:
举个例子:
刚开始声明一个struct A类型的结构变量时,我们无法用scores做任何事情,因为目前还没有给这个数组预留内存中相对应的存储空间。 此时声明一个指向struct A类型的指针,然后用malloc()来分配足够的空间以存储此结构的常规内容和伸缩型数组成员所需的额外空间。 比如此时设伸缩型数组内含6个double类型值,我们可以:
现在就有足够的内存空间存储它们了,接下来我们可以用指针访问结构成员了:
同时带伸缩型数组成员的结构有一些限制:
二、 联合既然上面介绍了结构体,那也顺带提一下联合。 联合也是一种数据类型,其声明和结构声明也很像:
?其中关键字“ union "表明它是一个联合体。 是不是乍一看和结构体的声明也只是关键字之差而已,但实际上两者有着很大区别:虽说结构体和联合体都是由多个不同类型的成员组成的,但联合中只存储一个被选中的成员,而结构的所有成员都存在。 我的理解就是说,结构体相当于每个成员都能有属于自己的一块专属内存位置,而联合体是多个成员共享一块内存位置,来了新的成员就要把原来的东西全部清走(归零)。 三、枚举类型枚举类型实质上是一种整型数据类型,主要通过预定义列出所有值的标识符来定义一个有序集合。和预定义#define一样,使用枚举类型时应该放在int main()之前。 3.1 枚举声明
其中关键字“ enum ”表示枚举类型身份。花括号中是一个枚举集合,第一个元素的默认值为0,后面元素的值依次递增,简单代码展示: 输出结果为: 如果此时为初始化中间一个元素的值为9: ?输出结果为: 这种情况你会发现出现断层,赋值前的成员依旧按照默认赋值,而被赋值的值往后的成员都从所赋值数开始相加。 3.2 枚举用法
四、你想取个外号吗:typedef4.1 typedef简介typedef工具可以用于建立C标准数据类型的别名或缩写。刚开始我觉得这个操作多少有些多此一举,但它用于给复杂的类型命名时确实能简化程序、提高可移植性。 其基础使用格式为:
注意一点,typedef只能用于创建类型别名,不能用于值。 简单使用示例1:
简单使用示例2 :
4.2 typedef与#define预定义的区别那么这时候就有人说了:哎?这个我用#define宏定义预处理一样可以完成啊:
那雀食。但你要知道typedef也有#define没有的功能:
选择表示数据的方法有很多,希望自己在以后的代码编写中,能够充分利用好各个数据处理方法的优点,从而使得其效率更高,会感觉是一件很有趣的事情。 下篇链表。 ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:24:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |