资源描述:
《结构体、共用体、枚举.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、个人收集整理勿做商业用途本章主要内容:结构体ﻩ共用体ﻩ枚举ﻩtypedef的用法ﻩ1.1构造数据类型(自定义数据类型)到目前为止,我们已经介绍了整型、实型、字符型等基本数据类型,也介绍了一种构造数据类型--数组,它由若干个数据类型相同的数据组成。但是,在实际的应用中,常常需要把类型不同的一系列数据存储在一起,例如要登记一个学生的信息,则需要记录他的姓名(字符数组)、学号(整型或字符型)、年龄(整型)和身高体重(浮点型)等,前面介绍的数组无法完成这一任务,因为数组要求所有的元素属于同一类型。为了满足程序设计的需要,C语言提供了一种构造数据类型——结构体,它由
2、若干个“成员”组成,每个成员可以是一个基本的数据类型,也可以是已经定义的构造类型。共用体可以看作是一个特殊的结构体,与结构体不同的地方在于它允许在系统的同一块内存区域保存不同的数据类型。所有成员数据的起始地址都是相同的。1.2结构体结构是用户在程序中自己定义的一种数据类型,它是一些具有不同数据类型的变量的集合个人收集整理勿做商业用途。例如,我们定义一个student结构,该结构包含了学生的姓名、学号、年龄、身高、体重等一系列的信息,一个结构体变量就拥有上面的所有信息,是一个整体。使用结构,可以有效地实现相关信息的存储和管理。声明结构体类型的一般格式如下:s
3、truct结构体名{ﻩ数据类型1成员名1;ﻩﻩ数据类型2 成员名2;ﻩ……ﻩ数据类型n 成员名n;};//注意不要漏掉这里的;说明:1.struct是C语言声明结构体类型时所必须使用的关键字,不能省略。2.大括弧内的每一个类型声明语句右面都要用分号“;”作为语句结束标记,大括弧外也有一个分号“;”作为结构体类型声明语句的结束标志。3.结构体名通常用大写。(参见代码Example1)结构体变量的定义:个人收集整理勿做商业用途ﻩ前面只是构造了一种结构体类型,它相当于一个模型,其中并没有具体的数据,系统也不给它分配内存空间。相当于有了int类型一样,我们还要利用
4、这个类型去定义变量。结构体变量的定义一般有以下3中方式:1.用结构体名去定义变量structSTUDENT{longsNo;ﻩcharsName[20];ﻩcharsSex;ﻩintsAge;floatsScore;};structSTUDENTstu1; //定义结构体变量stu1.2.定义结构体的同时定义变量structSTUDENT{ﻩﻩlongsNo;ﻩchar sName[20];ﻩcharsSex;ﻩintsAge;ﻩﻩfloatsScore;}stu1;//定义结构体的同时定义结构体变量3.直接定义结构体的变量(个人收集整理勿做商业用途这种方
5、法将类型定义和变量的定义合二为一,没有结构体名,以后无法再使用这种结构体定义其他的变量)struct//没有结构体名{longsNo;ﻩchar sName[20];ﻩchar sSex;intsAge;ﻩﻩfloat sScore;}stu1;结构体变量的初始化:只能在定义变量的同时对结构体变量进行整体赋初值,在其他任何地方,都不允许整体赋值。且赋值时要用{}括起来。(参见代码Example2)数组与结构体的异同:数组:是相同数据类型的集合,不能用一个数组变量给另一个数组变量赋值。结构体:是不同数据类型的集合,可以用一个结构体变量B给另一个结构体变量A赋
6、值。此时结构体变量A中的每个成员都将被设置为结构体变量B中相应成员的值。即使成员是数组也可以,这种赋值方式被称为成员赋值。结构体变量的使用:ﻩ使用结构体变量中的成员的格式是:个人收集整理勿做商业用途结构体普通变量:结构体变量名.成员名结构体指针变量:(*结构体指针变量名).成员名或结构体指针变量名->成员名(参见代码Example3)结构体数组:和定义结构体变量的方法相仿,只需说明为数组即可。而初始化的方法和其他数据类型的数组的一样。结构体数组元素引用格式:结构体数组名[下标].成员名。(参见代码Example4)指向结构体的指针:和定义结构体变量的方法相
7、仿,只需说明为指针即可。(参见代码Example5)sizeof求结构体占用内存的大小:在该程序中,我们用到了sizeof(structSTUDENT),细心的同学会发现在计算结构体占用的字节大小时,已经不再是简单的各个数据类型占用的字节大小的和。(参见代码Example6)该结构体由char和int组成,原本应该是5,为什么变成了8呢?这里涉及到一个字节对齐的概念。可以用#pragmapack(n)设置字节对齐方式。参见《sizeof(结构体)和内存对齐.doc》和《pragma预编译指令》求结构体sizeof的三个原则:1. 结构体变量的首地址是其最宽
8、基本类型成员的整数倍2. 结构体每个成员相对于结构体首地址的偏移量