天天看点

《迷人的8051单片机》----3.6 构造类型数据

本节书摘来自华章出版社《迷人的8051单片机》一书中的第3章,第3.6节,作者高显生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

我们前面介绍的数据类型有字符型、整型、实型等,它们都属于基本的数据类型。c语言中还支持构造类型的数据,它是由基本数据类型按照一定的规则组合而成的,构造类型数据主要包括数组、结构体和共用体等。

简单地说,数组就是同一类变量的有序集合。数组同普通变量一样,要先定义后使用,定义数组的方法如下:

<code>数据类型 数组名 [常量表达式] ;</code>

定义数组时,“数据类型”是指数组中各个单元的类型,数组只能是同一类型的数据单元的集合;“数组名”是整个数组的标识,命名方法同变量命名方法相同;“常量表达式”表示数组中单元的个数,它必须用括号括起,括号里的数不能是变量,只能是常量。定义数组的方法可以参考以下代码:

<code>unsigned int count [10] ;</code>

以上代码定义了无符号整型数组count,它有10个数据单元。在使用数组时,用数组名加下标的方法加以引用,具体方法可以参考以下代码:

<code>count [3] = x;</code>

意思是将变量“x”的值赋给数组count的第四个元素。这里需要注意的是,数组的下标是从0开始的,“count[0]”就代表数组中的第一个数据单元,“count[9]”代表的是其最后的一个数据单元。我们也可以在定义数组的时候为其赋初值,定义这种数组的格式如下:

在赋初值的数组中,方括号内的常量表达式是可以省略的,这时数组中数据单元的个数就由实际初值的个数决定。“{}”括号内是数组各单元的初值,两个初值间用逗号分隔。定义赋初值的数组可以参考以下代码:

上面介绍的数组是一维的,数组也可以是多维的,关于多维数组在这里不做详细介绍,需要时可以参考c语言的相关书籍。

结构体是在一个统一的名称下,组合在一起的变量的集合。结构体中的每个变量都称为结构体的成员,每个成员之间的数据类型可以不同,结构体变量的总长度等于结构体中每个成员长度的总和。定义结构体的格式如下:

例如,我们要构建一个学生情况登记表,可以用下面的方法定义结构体:

在上面的结构体定义中,struct是结构体类型标识,是c语言的关键字。结构体的名称是student,这个结构体由3个成员构成,即num、name和age。“{}”结束后的student1、student2定义的是两个结构体变量,最后的“;”是结构体的类型定义结束符。 结构体不能与其他基础型的变量间相互赋值,对结构体变量的引用,包括赋值、运算等都是通过结构体变量的成员来实现的,引用上面定义的结构体变量成员的方法如下:

共用体与结构体有相似之处,但共用体的成员全部共用相同的存储空间,一个共用体变量的长度等于各成员中最长的成员长度。实际上,共用体是一个在不同时间保存不同类型数据的变量,这些不同类型的数据共用一个存储空间,赋入新值则会冲掉旧值。定义共用体的格式如下:

例如,我们要定义一个名称为number的共用体可以参考以下代码。

在这个共用体的类型定义中,union是共用体类型的标识,也是c语言的关键字。共用体的名称是number,这个共用体由3个成员构成,即a、b和c。“{}”结束后的u1、u2、u3定义的是3个共用体变量。共用体变量的成员在内存中占用同一首地址的空间,其引用方法如下:

本章至此已经将c语言的基础知识部分进行了概括说明,阅读完本章内容,相信你对c语言及c程序的开发会有一个基本的认识。在使用keil c51编译器为8051单片机开发c程序时, c51编译器会针对8051单片机的特点对编译器进行一些优化,本书将在后面的章节中对keil c51编译器的特色部分进行介绍。

继续阅读