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

简介:

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

3.6 构造类型数据

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

3.6.1 数组

简单地说,数组就是同一类变量的有序集合。数组同普通变量一样,要先定义后使用,定义数组的方法如下:
数据类型 数组名 [常量表达式] ;
定义数组时,“数据类型”是指数组中各个单元的类型,数组只能是同一类型的数据单元的集合;“数组名”是整个数组的标识,命名方法同变量命名方法相同;“常量表达式”表示数组中单元的个数,它必须用括号括起,括号里的数不能是变量,只能是常量。定义数组的方法可以参考以下代码:
unsigned int count [10] ;
以上代码定义了无符号整型数组count,它有10个数据单元。在使用数组时,用数组名加下标的方法加以引用,具体方法可以参考以下代码:
count [3] = X;
意思是将变量“X”的值赋给数组count的第四个元素。这里需要注意的是,数组的下标是从0开始的,“count[0]”就代表数组中的第一个数据单元,“count[9]”代表的是其最后的一个数据单元。我们也可以在定义数组的时候为其赋初值,定义这种数组的格式如下:

数据类型  数组名 [常量表达式] = { 常量表达式1,常量表达式2,…,常量表达式n };

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

unsigned char  seg_table[ ]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};

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

3.6.2 结构体

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

struct 结构体类型名
{
    成员类型名 成员名1;
    成员类型名 成员名2;
    … 
    成员类型名 成员名n;
}变量名列表;

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

struct  student            //结构体关键词及结构体名称
{
unsigned int  num;        //学号,结构体的成员1
unsigned char name;        //名字,结构体的成员2
unsigned char age;        //年龄,结构体的成员3
} student1, student2;        //结构体变量名

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

student1.num = 57;
student2.age = 16;

3.6.3 共用体

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

union 结构体类型名
{
    类型说明符1  成员名1;
    类型说明符2  成员名2;
… 
    类型说明符n  成员名n;
}变量名列表; 

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

union  number            //共用体关键词和共用体名称
{
unsigned int    a ;        //共用体成员1
unsigned char   b;        //共用体成员2
float   c;                //共用体成员3
} u1,u2,u3;            //共用体变量名

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

u1.a=3457;
u1.b=215;
u3.c=12.634;

本章回顾

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

相关文章
|
安全 网络协议 API
利用单片机实现天气服务器获取指定位置天气数据
大家好,今天主要和大家聊一聊,如何利用单片机从心知天气服务器上获取到指定位置的天气数据,咱们先来了解一下心知天气吧!​
186 0
利用单片机实现天气服务器获取指定位置天气数据
|
存储 芯片
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
373 0
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
|
存储 编译器 内存技术
单片机异常复位后如何保存变量数据
单片机异常复位后如何保存变量数据
单片机异常复位后如何保存变量数据
|
存储 移动开发
51单片机数据传送指令
51单片机数据传送指令 51单片机数据传送指令   数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。  如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。
1515 0