8章 c语言程序设计 结构体,共用体与枚举类型.ppt_第1页
8章 c语言程序设计 结构体,共用体与枚举类型.ppt_第2页
8章 c语言程序设计 结构体,共用体与枚举类型.ppt_第3页
8章 c语言程序设计 结构体,共用体与枚举类型.ppt_第4页
8章 c语言程序设计 结构体,共用体与枚举类型.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第8章结构、共享和枚举类型,本章介绍了用户可以配置的四种数据类型:结构、共享、枚举类型和用户定义类型。8.1核心类型徐璐徐璐连接其他数据类型,但作为相互关联的数据集有机地组合在一起,C语言提供了称为“结构”的数据结构。核心类型可以由多个成员(域)中的构件组成。与阵列类型相比,特定核心类型的成员数必须固定。这类似于阵列。核心中的每个成员类型都可以不同。这是结构体和数组的区别。此外,因为有很多核心类型,定义核心类型时,成员项目的数量可能与其他类型的成员项目不同。8.1.1结构类型和结构变量的定义,C语言的结构类型与数据库语言的记录类型相同。例如:要反映员工的基本情况,必须包括姓名、性别、年龄、薪金

2、、地址等。对于其中每个项目,特定类型的资料(例如,年龄为整数时)。这些项目都与个人相关。定义结构类型struct结构类型名称/* struct是结构类型关键字*/数据类型数据项1;数据类型数据项2;也可以通过单击数据类型数据项打印部分/*,此行不能缺少分号!*/“struct结构类型名称”一起构成类型名称,与系统提供的标准类型一样,用于定义面部更改类型。结构名称可以任意确定,因此定义模式实体类型变量的类型名称不是唯一的。案例定义反映学生基本情况的结构类型,存储学生的相关信息。/*功能:反映学生基本情况的结构类型*/struct date /*日期结构类型定义:由年、月、日三个组成*/int y

3、ear;Int monthInt day。Struct std_info /*学生信息结构类型:学号、名字、性别、生日共4个*/char no7;Char name9Char sex3Struct date birthday。Struct score/*性结构类型:学号和3个成绩共4个项目*/char no7;Int score1Int score2Int score3。(1)“结构类型名称”和“数据项”的命名约定与变量名称相同。(2)具有相同数据类型的数据项可以逐行单独定义,也可以合并为一行定义。例如,在这种情况下,您还可以将日期结构类型变更为:struct date int year、mo

4、nth、day。(3)结构类型的数据项可以是默认数据类型,也可以是已定义的其他结构类型。例如,此案例代码中结构类型std_info的数据项“birthday”是定义的日期结构类型date。(4)在本书中,将个数据项称为结构类型的成员(或组件)。结构变量定义用户定义的结构类型,与系统定义的标准类型(int、char等)一样,可用于定义结构变量的类型。1.定义结构变量的方法可概括为以下三种:(1)间接定义法首先定义结构类型,然后定义结构变量。例如,使用案例中定义的学生信息结构类型std_info定义其结构变量student: struct STD _ infoss的结构变量student:结构类型

5、的所有成员。其中,birthday成员是日期结构类型,由3个成员组成。注意:使用间接定义法定义结构变量时,还必须指定结构类型名称。(2)定义直接定义法结构类型时定义结构变量,同时定义结构类型及其结构变量的一般格式如下:struct结构类型名称结构变量表;例如,结构变量student的定义可以更改为struct std_info student。(3)定义核心变量(未命名结构),而不使用核心名称。如果需要定义结构变量,可以写如下:struct结构变量表格示例:上一示例:请参见struct student:由于未记录核心类型的名称,因此不能再用于定义其他变量。说明(1)结构类型和结构变量是两个不同

6、的概念,就像int类型和int类型变量之间的区别一样。(2)结构类型的成员名称,可以与程序中的变量同名,表示徐璐不同的对象,不徐璐干涉。(3)在再记忆单元中,核心变量占据连续单元。占用的字节数是每个成员占用的字节数的总和。您可以使用Sizeof()测量结构变量的长度。例如, sizeof(struct date)的值是对6,8.1.2结构变量的引用和初始化。案例8.2定义使用案例8.1中定义的结构类型struct std_info储存和显示1的结构变数student # include struct . h/*外部结构变数student */struct STD _ infostudent=P

7、rintf(名称:% sn,student . name);printf(sex 3360% sn,student . sex);Printf (birthday :% d-%d-%dn,student.birthday.year,student.birthday.month,student,程序运行结果:)结构变量的初始化结构变量初始化格式类似于一维数组。与“结构变量=初始值”表不同,如果成员本身不同,例如,案例8.2中的student=000102、changer 3、man、1980,9,20。附注:初始值的资料类型必须符合结构变数对应成员的要求。否则,将出现错误。编译c程序时,每个成员

8、依次获取其初始值。如果只为前面几个成员指定值,则后面未指定值的成员如果是数值,则会自动分配0。对于字符类型,自动指定“0”。2 .结构变量的参考规则结构变量的参考分为两种情况。1.参考变量的成员之一:结构变量是整体。要访问其中的成员,必须先找到结构变量,然后找到中间成员。可以引用核心变量成员的格式为:(1)核心变量名称。成员名称(2)指针变量名成员名称(3)(*指针变量名)。成员名称,其中指针变量与核心变量的类型相同,并且已经指向相同类型的变量。这里是“.”是成员运算符。对于结构变量,请使用成员运算符.通过逐个访问相应的成员。“”称为结构指针运算符。运算符中,成员运算符和箭头运算符具有最高优先

9、级。示例:struct std _ info char name9Char sex3Float score;Struct date birthdayStud、arr5、* p;P=(1)要在结构类型变量stud中引用score成员项,请参阅stud .请参见通过score /*结构变量*/p score /*。通过指针变量*/* (p)。引用score arr 1。如果score、(3)成员本身是另一种结构类型,则只能通过多级成员运算引用最低级别成员。在这种情况下,参照格式是结构变量。成员。子代.展开到最低级别子代成员。例如,在结构变量student中,引用birthday成员的格式分别为st

10、udent . birthday . year student . birthday.(2)可以同时引用结构变量成员的地址和结构变量的地址。例如,int numStud1,stud2=wangfang ,01;执行赋值语句:stud1=stud2;然后,在stud2中,将每个成员的值依次分配给stud1中同名的相应成员。c不允许将一个结构体变量作为整体输入和输出。示例:scanf(“% d”,name15是数组,数组名本身是地址)。,通过指针变量引用结构成员时,如果表达式包含运算符(如,-),则必须根据运算符优先级确定表达式的含义。例如:p score相当于(p score),因此将score

11、加1。(p) score在再次访问成员score之前将p加1。示例:struct ABC char a20Int * ptp;Pt是核心类型的成员,表达式*p-pt引用pt指向的存储设备。*p-pt是指pt指向的存储设备,然后指针pt加1。(*p-pt)将pt指向的单元格的值加1。*p -pt访问pt指向的存储设备,然后将1与P相加。8.1.3核心阵列,核心变数只能储存一个物件的资料集合,多个物件的资料必须使用核心阵列。结构阵列中的每个元素都是包含结构类型所有成员的结构变数。案例使用前一个案例中定义的结构类型struct std_info定义存储和显示三个学生基本情况的结构数组student。

12、#includestruct.h/*定义和初始化外部结构阵列student 3 */struct STD _ infostudent 3= 000102 ,章3 ,男人,/*打印标题:包含一个空格字符*/printf(否NameSexBirthdayn)。/*三个学生的基本情况输出*/for(I=0);i3;I) printf(%-7s,studenti . no);Printf(%-9s,studenti . name);Printf(%-4s,studenti . sex);Printf (%d-%d-%dn,studenti.birthday.year,studenti.birthday

13、.month,studenti.birth,程序执行结果:否示例:struct std _ info char no7Char name9Char sex3Struct date birthday。Struct std _ info student20阵列包含20个元素,每个元素类型为structstd _ info,(2)定义结构时定义结构阵列范例。struct std _ info char no7Char name9Char sex3Struct date birthdayStudent20(3)直接定义核心阵列,而不定义类型名称struct。Student202.结构阵列的初始化格式为

14、结构阵列N初始值表格1、初始值表格2、初始值表n(例如struct std_info char no7)。Char name9Char sex3Struct date birthdayStudent2=000001,“lixiao”,m,1981.5.21,00002,“wangyi”,f,1982 . 8 . 10;指定初始值(例如定义了数据数的数组元素数)时,数组数为student=.如果初始化数据少于阵列元素的数量,则不能省略阵列元素的数量。此时,只为可以指定初始值的元素指定初始值。将0分配给数字成员,将0分配给文字成员。注意:由于scanf函数遇到空格时被视为字符串结束,因此建议程序在

15、遇到输入名称时使用gets函数。8.1.4指向结构类型数据的指针,1 .指向结构变量的指针结构变量的内存起始地址称为指向结构变量的指针。范例:struct STD _ info * p;说明P是指向核心类型struct std_info的指针。定义指针变量后,必须指定值才能使用。案例使用指向结构变量的指针访问结构变量的各个成员。# include struct . h struct STD _ infostudent= 000102 ,张三,男人,1980,9,20;Main() struct std_info *p_std=,通过指向结构变量的指针访问结构变量的成员就像直接使用结构变量一样。通常,如果指针变量pointer已指向结构变量1)var(1),则var . member(2)pointer-member(3)(* pointer)。member/* 的三种格式相同*/注:在格式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论