编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

一起学《C程序设计》第十课——结构体、共用体以及枚举类型

gowuye 2024-04-25 04:41 11 浏览 0 评论

注意,请认真学习完《C程序设计(第五版)》第九章后再阅读本文会有更大的收获。

结构体

作用与定义

前面我们学习过C语言的数组,C语言的数组在使用上有一定的局限性,比如我们常使用的一维数组一旦定义了就只能接纳一种数据类型,而生活中我们对某个事物的描述往往包含多个维度,比如一个人的基本信息包含:身高、体重、年龄,性别、爱好、籍贯……这些信息分别用整型、浮点、字符串等描述,是没有办法放在一个数组里供我们使用的,而这就引出了一个非常有用的C语言构造类型——结构体(structure)。

可以看出结构体是对数组的完美补充和扩展。定义一个结构体要使用struct关键字,花括号里对成员变量进行声明,如下示例:

代码里可以看见结构体可以嵌套定义,形成更复杂的构造类型。

初始化结构体变量

定义结构体的时候不能给成员赋初始值;结构体变量的初始化就是按照顺序写入初始值,从前往后匹配。初始值的间隔用逗号,而定义结构体时成员间隔用分号,这里不要搞混了。

如果初始值的个数少于成员的个数,那么就按照顺序匹配值给成员,没有匹配上的成员按照其数据类型来赋默认值(整型默认值为0,字符默认值为“\0”)。

引用结构体成员

常规引用方式为“点号运算符”来连接结构体变量和成员名称,如果有嵌套的结构体则按顺序使用点号引用成员(如上面示例xiao_ming.hometown.city)。

另一种引用方式通过指针来实现(下文中有介绍)。

结构体数组

相对于普通数组来说,结构体数组的类型和元素都是某个自定义的结构体。在使用上和普通数组没有太大的区别,可以通过循环或者下标来引用结构体数组里的元素。

结构体与指针

结构体变量的指针

结构体变量的指针,就好比一个整型数据的指针,定义的时候指定指针对应数据的类型,赋值就是结构体变量的首地址。

通过结构体指针变量来引用结构体里的成员时用“->”运算符。

结构体数组变量的指针

定义一个指向结构体数组变量的指针变量,和前面所学习定义一个普通数组的指针变量一样,指向数组的首个元素的地址,执行指针运算时,移动的单位地址长度是其对应结构体类型的长度,即指针移动一个单位长度会指向下一个结构体元素。

结构体变量作为函数的参数

结构体变量作为实参传递到函数中,实质上是把值复制传递给了形参,它们互不影响。

但是使用结构体变量的指针作为参数传递,如果结构体指针在函数内引用了结构体成员并发生值的变化,相应的函数外的结构体也会发生变化。

共用体

定义

共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。定义共用体和定义结构体类似,共用体声明关键字时union。

共用体占用的内存字节长度取决于最长的那个成员,并且只有最后一次赋值的成员才有效。

引用共用体成员

引用上也和结构体一致,可以用点号运算符,也可以使用指针的方式访问成员。

初学者可能对于共用体的使用场景不太好理解。如果接触过数据库的话,经常会遇到一个字段可能存储两个以上数据类型的值,这时候把数据读取出来,映射到程序中的时候就可以使用共用体来存储了。

共用体也可以和结构体嵌套使用,一般是结构体的某个成员类型定义为共用体。

枚举类型

所谓枚举,就是列出一个变量所有可能的值,定义一个枚举类型的关键字时enum。枚举类型使用上注意以下几点:

  • 成员定义形式一般为字符串,但是不要加引号
  • 成员的值实际上是整数,默认从0开始递增
  • 定义时可以任意指定成员的值,没有指定的保持“前面成员的值加一”这个规则

枚举类型相当于我们定义了一堆值为整数的同类型的常量,在使用上同样很直观方便。

小结

到目前,C语言的数据类型我们算是学完了,学以致用,一定要在实际运用中去熟练各种数据结构的用法,在不同的场景中使用不同的数据结构,必要时将它们嵌套使用以满足某些复杂的应用场景。

往期文章

一起学《C程序设计》第九课——预处理和动态分配内存

一起学《C程序设计》第八课——指针

一起学《C程序设计》第七课——函数及实战练习

一起学《C程序设计》第六课——数组、字符串及实战练习

一起学《C程序设计》第五课——循环控制及实战练习

相关推荐

R语言数据挖掘实践——支持向量机的常用函数
R语言数据挖掘实践——支持向量机的常用函数

e1071包是R语言中用于支持向量机建模与分析的软件包,其主要用于支持向量机的模型构建,提供核心函数svm()来建立支持向量机的基础模型,并且可辅助使用pred...

2024-05-18 12:15 gowuye

R数据分析:如何做聚类分析,实操解析
R数据分析:如何做聚类分析,实操解析

Clusteringisabroadsetoftechniquesforfindingsubgroupsofobservationswi...

2024-05-18 12:14 gowuye

用R语言做数据分析——马赛克图
用R语言做数据分析——马赛克图

到目前为止,我们已经学习了许多可视化定量或连续型变量间关系的方法。但如果变量是类别型的呢?若只观察单个类别型变量,可以使用柱状图或者饼图;若存在两个类别型变量,...

2024-05-18 12:14 gowuye

用R语言做数据分析——方差分析基本概论
用R语言做数据分析——方差分析基本概论

在实际工作中,影响一件事的因素是很多的,我们总是希望通过各种试验来观察各种因素对试验结果的影响。例如,不同的生产厂家、不同的原材料、不同的操作规程,以及不同的技...

2024-05-18 12:14 gowuye

R语言数据分析实战:数据清洗与可视化
R语言数据分析实战:数据清洗与可视化

《R语言数据分析实战:数据清洗与可视化》是一本深入浅出的实践指南,专为对数据分析感兴趣的读者精心编撰。本书旨在帮助读者掌握R语言这一强大的统计分析工具,通过实例...

2024-05-18 12:13 gowuye

用R语言做数据分析——双因素方差分析
用R语言做数据分析——双因素方差分析

在双因素方差分析中,受试者被分配到两因子的交叉类别组中。以基础安装中的Tooth-Growth数据集为例,随机分配60只豚鼠,分别采用两种喂食方法(橙汁或维生素...

2024-05-18 12:13 gowuye

用R语言做数据分析——独立两样本和K样本检验
用R语言做数据分析——独立两样本和K样本检验

coin包简介对于独立性问题,coin包提供了一个进行置换检验的一般性框架,通过这个包,我们可以回答如下问题:响应值与组的分配独立吗?两个数值变量独立吗?两个类...

2024-05-18 12:13 gowuye

用R语言做数据分析——用回归做方差分析
用R语言做数据分析——用回归做方差分析

之前提到方差分析和回归都是广义线性模型的特例,之前文章的所有设计都可以用lm()函数来分析。为了更好地理解输出结果,需要弄明白在拟合模型时,R语言是如何处理类别...

2024-05-18 12:13 gowuye

数据分析R语言——数据结构
数据分析R语言——数据结构

数据分析R语言——数据结构数组数组(array)与矩阵类似,但是维度可以大于2.数组通过array()函数创建。形式如;myarray<-array(v...

2024-05-18 12:13 gowuye

R语言数据挖掘实践——关联分析的常用函数
R语言数据挖掘实践——关联分析的常用函数

arules和arulesViz是R语言中两个专用于关联分析的软件包。其中arules用于关联规则的数字化生成,提供Apriori和Eclat这两种快速挖掘频繁...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——判别分析的常用函数
R语言数据挖掘实践——判别分析的常用函数

判别算法在R语言中实现主要涉及4个软件包中的相关函数,它们依次为MASS、klaR、class和kknn。其中MASS包含有大量实用而先进的统计计数函数及适用数...

2024-05-18 12:12 gowuye

用R语言读取Excel、PDF和JSON文件,终于有人讲明白了
用R语言读取Excel、PDF和JSON文件,终于有人讲明白了

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——聚类分析的常用函数
R语言数据挖掘实践——聚类分析的常用函数

使用R语言可以轻松实现聚类分析,stats、cluster、fpc和mclust是常用的四个聚类分析软件包。stats主要包含一些基本的统计函数,如用于统计计算...

2024-05-18 12:12 gowuye

用R语言做数据分析——时间序列分类
用R语言做数据分析——时间序列分类

时间序列分类是根据已标注的时间序列建立一个分类模型,然后使用分类模型预测未标记时间序列的类别。从时间序列中抽取出新特征肯呢个有助于提高分类模型的性能。特征提取技...

2024-05-18 12:11 gowuye

一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
一文看懂用R语言读取Excel、PDF和JSON文件(附代码)

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:11 gowuye

取消回复欢迎 发表评论: