C程序设计课件第11章.ppt
《C程序设计课件第11章.ppt》由会员分享,可在线阅读,更多相关《C程序设计课件第11章.ppt(46页珍藏版)》请在三一文库上搜索。
1、第十一章 结构体,结构体 结构体与函数 本章小结 作业,考虑这样一类数据:一个数据项由多个子数据项组成,而且每个子数据项的类型可能不一样。 在人事档案管理中,每个人的自然情况表可能包含: 名字(字符串型) 年龄(整型) 出生时间(三个整型) 性别(枚举)等等。 研究人造卫星,每个人造卫星的信息可能包括: 名字(字符型) 发射时间(三个整数) 重量(实型) 直径(实型) 轨道半径(实型) 赤道夹角(实型)等等。,数组可描述由同类型子数据项组成的数据。 结构体可描述由不同类型子数据项组成的数据,结构体,结构体类型 结构体类型是分量的集合 分量也称成员、成分、域,例11-1 一个人的自然情况表 卫星
2、数据类型,enum sext male , female ; struct date int year ,month ,day ; ; struct preson char name10 ; int age ; enum sext sex ; struct date birthdate ; ;,struct mansatellite char name10 ; struct date lounchdate ; float weight, diameter, orbitrad, angle ; ;,date是一个结构体类型,包含三个成分 成分year为int类型 成分month为int类型 成分
3、day为int类型,preson是一个结构体类型,包含四个成分 成分name为数组类型 成分age为int类型 成分sex为枚举类型 成分birthdate仍为一个结构体类型,mansatellite是一个结构体类型,包含六个成分,结构体类型引用 在struct后跟以结构体标签,称为“结构体类型引用”。在例11-1的结构体类型定义的意义下: struct date struct preson struct mansatellite 都是结构体类型引用,使用它们将分别标记相应结构体定义。,结构体类型说明符: 结构体类型定义和结构体类型引用统称“结构体类型说明符” 使用结构体类型说明符可以 定义结
4、构体类型的类型名 声明结构体类型变量,结构体类型名,使用 typedef 可以定义结构体 类型名 typedef 结构体类型说明符 标识符 例子 typedef struct int y,m,d datetype; struct date int y,m,d ; typedef struct date datetype;,例11-2 定义结构体类型名,typedef struct date int year,month,day ; datetype ; typedef char tstring1010; typedef struct tstring10 name ; int age ; enu
5、m sext sex ; struct date birthdate ; presontype ; typedef struct mansatellite mansatellitetype,datetype birthdate;,结构体变量,结构体类型变量声明可以采取如下三种形式之一 使用结构体类型引用 直接使用结构体类型定义 使用typedef定义的结构体类型名,例11-3 结构体变量声明,struct preson zhang ; struct date int year,month,day ; dateofbirth; struct char author10 ; datetype pu
6、blish_date ; int page_number ; programming ; mansatellitetype first_east ;,变量zhang用结构体类型引用声明 是struct preson类型,具有如图结构,例11-3 结构体变量声明,struct preson zhang ; struct date int year,month,day ; dateofbirth; struct char author10 ; datetype publish_date ; int page_number ; programming ; mansatellitetype first
7、_east ;,变量programming使用不带结构体标签的结构体类型定义声明,包含3个成分,分别为字符数组类型的author、datetype类型的publish_date、int类型的page_number,结构如图所示;,例11-3 结构体变量声明,struct preson zhang ; struct date int year,month,day ; dateofbirth; struct char author10 ; datetype publish_date ; int page_number ; programming ; mansatellitetype first_e
8、ast ;,变量first_east使用typedef定义的类型标识符mansatellitetype声明,具有如图结构,类型定义不分配存储空间,只说明一个数据类型的框架结构。 变量声明时才给变量分配存储空间,并且使得被声明的变量具有相应类型的结构。 到目前为止声明的四个变量zhang、dateofbirth、programming、first_east具有实体,被分配存储空间。 类型标识符datetype、 mansatellitetype只是定义了一个数据类型的框架,不占用存储空间,只给相应类型起一个名字。,指向结构体变量的指针,C可以定义指向任何类型的指针类型,并声明相应指针类型的变量,
9、结构体类型当然不例外。,struct preson *pointer_preson ; struct date int year,month,day ; *dateofpointer ; struct char author10 ; datetype publish_date ; int page_number ; *p ; mansatellitetype *p_east,例11-4 指向结构体类型变量的指针变量,变量pointer_preson为指向标签为preson的结构体类型变量的指针变量。 pointer_preson可以指向相应结构体类型的变量。比如 pointer_preson
10、= ,变量p为指向无标签结构体类型变量的指针变量。 P 可以指向相应结构体类型的变量。比如 p = ,变量p_east为指向结构体类型mansatellitetype变量的指针变量。 p_east 可以指向相应结构体类型的变量。比如 p_east = ,结构体变量的成分,访问结构体变量的一个成分,使用成员选择表达式 成员选择表达式 直接成员选择 间接成员选择 直接成员选择 后缀表达式 . 标识符 间接成员选择 后缀表达式 - 标识符,直接成员选择 直接成员选择表达式针对一般的结构体变量。 形式是: r . w r 是后缀表达式,最终计算出一个结构体变量; w是 r 所属结构体类型中的一个成员名
11、字 下述成员选择表达式是合法的: zhang.name programming_pascal.author,间接成员选择 间接成员选择表达式针对指向结构体变量的指针变量 形式是 p-w p 是后缀表达式,最终计算出一个指向结构体变量的指针变量; w 是p所指向结构体变量所属类型中的一个成员名字 下述成员选择表达式是合法的: pointer_preson - name p_east - weight p_east - lounchdate,也可首先对指针变量进行求地址运算 然后使用直接成员选择 比如上述三个选择表达式还可以写成如下形式。由于优先级的原因,这里的括号是必须的 (*pointer_p
12、reson).name (*p_east).weight (*p_east).lounchdate,由于成员选择表达式本身也是一个变量访问,它是相应成分类型的一个变量,它与成分类型的其它变量一样 凡是可以使用那些变量的地方都可以使用成员选择表达式。 对于嵌套结构体,可以认为“成员选择表达式”仍然是一个“后缀表达式”,所以可以继续应用“成员选择表达式”的规则访问里层的成分。 zhang.birthdate.month p_east - lounchdate.year,例11-5 设计表示复数的结构体类型, 给出复数加法和乘法函数,解: /* 复数类型 */ typedef struct comp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 课件 11
链接地址:https://www.31doc.com/p-2142461.html