(精品)第十四章结构体与共用体 (2).ppt
《(精品)第十四章结构体与共用体 (2).ppt》由会员分享,可在线阅读,更多相关《(精品)第十四章结构体与共用体 (2).ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十四章 结构体与共用体14.1 结构体我们可以通过前面学习过的数组,来构造若干个相同类型的数据的集合。当需要使用不同的数据类型进行构造数据集合时,我们可以使用结构体。一个结构体可以由若干个成员组成,不同的结构体可以根据需要,选择不同的成员组成。对于某一具体的结构体类型,成员的数量必须固定,结构体中各成员在内存中占据连续的存储单元,这两点均与数组相同。不过,在结构体中各成员可以具有不同的数据类型,而数组中每个元素都是相同数据类型,这是数组与结构体最重要的区别。例如可以通过结构体来构造学员的档案信息,假如包括如下数据项:姓名(name):字符串 性别(sex):字符型 年龄(age):整型 总分
2、(score):实数我们可以将这4个成员组成一个名为student的整体,这就构成了结构体类型。一.结构体类型的说明结构体类型说明的一般形式如下:struct 结构体名 类型名1 成员名1;类型名2 成员名2;类型名n 成员名n;;说明:struct是结构体类型说明的关键字,结构体名以及成员名都是用户自定义的标识符。结构体名用来唯一标识该结构体,可以省略不写。结构体中所含的成员个数,根据需要可以是任意多个。结构体中的成员名可以和程序中的其他变量名同名,不同结构中的成员也可以同名。结构体说明要以分号(;)结尾。例14.1 构造一个结构体,用来说明上面的学员档案信息。struct student
3、char name10;char sex;short int age;float score;在本例中student是结构体,结构体包含了4个成员变量。结构体类型所占的存储单元数是该结构体类型中所有成员占用的存储单元数的总和。例如上述student结构体占用了17个字节的内存空间(name占10个字节,sex占1个字节,age占2个字节,score占4个字节),在内存中各个成员的内存地址是连续的,内存单元分配如下图所示:namesexagesorce结构体可以嵌套说明,即在结构体说明里再说明另外一个结构。例14.2 struct stu char name10;char sex;struct
4、date int year;int mon;int day;birthday;int age;float score;二.定义结构体类型的变量、指针变 量和数组定义结构体类型变量、指针变量和数组有以下多种方式。(1)直接在结构体类型说明之后定义结构体变量。例如:例14.3 struct student char name10;char sex;int age;float score;s1,*ps,stu3;本例中在说明结构类型struct student的同时,定义了一个结构体变量s1,一个基类型为结构体类型的指针变量ps和有三个元素的结构体数组stu3。结构体变量中的各成员在内存中按说明中顺
5、序依次排列。具有这一结构类型的变量只能存放一组数据(即一个学生信息)。如果要存放多个学生的数据,就要使用结构体数组。例14.3中,数组stu可以存放三个学生的信息,它的每个元素都是一个struct student类型的变量;ps为基类型struct student结构类型的指针变量,ps可以指向任意struct student类型的变量。如可以ps赋值:ps=&s1;以让ps指向s1结构体变量。(2)在说明结构体类型时,不指定结构体名,而直接定义结构体变量、数组和指针。例如:例14.4 struct char name10;char sex;int age;float sorce;s1,*ps
6、,stu3;本例中,省去了结构体名称,而是直接在说明结构体时定义结构体变量、数组和指针,该例中除了没有结构体名外,其他均与(1)中相同。这种情况是,只能用该结构体类型定义一次变量、数组和指针。(3)先说明结构体类型,再进行变量的定义。这种方法可以在以后的程序中多处定义变量。例如:例14.5 struct student char name10;char sex;int age;float score;struct student s1,*ps,stu3;本例中先说明了struct student结构体类型,然后再通过struct student这个结构体类型来定义、指针和数组。可以把struc
7、t student当作普通的数据类型来理解。在该结构体类型说明后,其他地方都可以用struct student来定义变量。作为结构体类型,struct必须与结构体标识名共同来说明不同的结构类型。不能只写结构体标识名student而省略struct,因为student不是类型标识符。由关键字struct和student一起才能唯一地确定所说明的结构体类型。(4)使用typedef说明一个结构体类型名,再用新类型名来定义变量。例如:例14.6 typedef struct char name10;char sex;int age;float score;STU;STU s1,*ps,stu3;本例
8、中用了typedef来对结构体进行说明,这样STU是一个具体的结构体类型名,它代表上面所指定的一个结构体类型,能够唯一的标识这种结构体类型。因此,可以用它来直接定义变量,而不用再写struct。三.给结构体变量赋初值(1)结构体变量赋初值。和其他基本数据类型的变量一样,结构体变量在定义的时候可同时赋初值。所赋值以成员定义出现的顺序依次放在一对花括号内,例如:例14.7 struct student char name10;char sex;int age;float score;s1=“Jim”,M,20,89;对结构体变量进行赋初值时,C编译系统按照每个成员在结构体中定义的顺序一一对应赋初值
9、,不允许跳过前边的成员给后面的成员赋初值。但可以只给前面的若干个成员赋初值,对于后面未赋初值的成员,如果是数值型和字符型数据,系统会自动赋初值零。(2)给结构体数组赋初值。例14.8 struct student char name10;char sex;int age;float score;stu3=“Jim”,M,20,89,“Sam”,W,21,78,“Bill”,M,22,85;结构体数组中各元素之间的地址空间是连续的,且每个元素中的各成员,根据其定义的顺序,其各成员的地址空间也是连续的。四.引用结构体变量中的成员1.对结构体成员引用 引用结构体成员有三种形式:结构体变量名.成员名;
10、结构体指针变量-成员名;(*结构体指针变量).成员名。上述3种形式中,点(.)是成员运算符,箭头(-)称为结构指向运算符,由减号(-)和大于号()两部分构成,之间不得有空格。第三种形式中,先用指针的间接访问运算符,再用成员运算符来访问成员,其中一对圆括号不可少。例如有以下定义和语句:struct stu char name10;char sex;struct date int year;int mon;int day;birthday;int age;float grade3;float score;s1,*ps,s3;ps=&s1;同种类型的结构体变量地址才能赋给同种类型的结构体指针变量。可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品第十四章结构体与共用体 2 精品 第十四 结构 共用
限制150内