- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演示文稿第8章结构体与共用体及其应用演示文稿分解
想一想 在问题8.3的代码中,如果要求对输入数据对输入的年、月、日进行合法性校验,比如年是在1989-2007年之间,月是在1-12之间,日是1-30之间,怎么解决?如果进一步要求根据月份而确定每月的天数,又该怎么办呢? 练一练 尝试编写学生管理系统,定义学生信息的结构体类型,分别用函数实现数据输入、数据输出、计算每个人的平均分,进行排序和成绩插入等操作。 小结:函数中的结构体 结构体变量可以传递给函数以及由函数返回,作为函数参数的传递方式与简单变量作为函数参数的处理方式完全相同。即采用“值传递”方式,形参结构体变量中各成员值的改变,对相应实参结构体变量不产生任何影响。 结构体数组作为函数参数,与数组作为函数参数的处理方式完全相同。即采用“地址传递”方式,形参结构体变量中各成员值的改变,对相应实参结构体变量产生影响。 共用体类型的定义 共用体类型定义的一般形式为: union 共用体类型名 { 数据类型 成员1; 数据类型 成员2; …… 数据类型 成员n; }; 共用体变量的定义 union 共用体类型名 变量名; 共用体变量中成员的引用 共用体变量名. 成员名 8.4 共用体的应用:学一学 试一试 问题8.9: 在第7章问题7.4中,我们利用位操作将按键的低8位和高8位分离出来进行键盘检测,现在我们使用共用体来检测键盘,如果用户按下左、右键,显示LEFT RIGHT,如果用户按下上、下键,显示UPDOWN,按ESC键退出。 解题步骤 1.宏定义上、下、左、右键和ESC键的键值 2.定义表达键盘的共用体keyboard 3.定义检测用户按键的函数int fnGetKey(void) 4.在主函数中调用函数int fnGetKey(void),根据用户按的上、下、左、右键显示不同的信息 流程图 程序代码:宏定义与共用体定义 #define LEFT 75 #define RIGHT 77 #define UPPER 72 #define DOWN 80 #define ESC 27 union keyboard{ unsigned int iKeyInfo; char chKeyBit[2]; }; /*定义共用体类型*/ 程序代码:用户函数 int fnGetKey(void) { union keyboard uniKey1; /*定义共用体变量*/ while(bioskey(1) == 0); /*检测用户有无按键*/ uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/ return (uniKey1.y[0]==0? uniKey1.chKeyBit[1]: uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/ } 程序代码:主函数 void main() { int iKey; printf(please press direction key); while(1) { iKey = fnGetKey(); if(iKey==LEFT || iKey==RIGHT) printf(leftright); /*主菜单左右选择*/ else if(iKey==UPPER|| iKey==DOWN) printf(updown);;/*子菜单上下选择*/ if(iKey==ESC) break; /*执行编辑命令操作*/ } } 小结: 1.C最初引入共用体的目的,一是节省存储空间,另外是可以将一种类型的数据不通过显式类型转换而作为另一种类型数据使用,如问题8.9的解决方法。 2.共用体采用覆盖技术,实现不同类型的变量存放到同一内存单元,所以在每一时刻,存放和起作用的是最近一次存放的成员值。变量的各个成员使用同一段内存空间,所以对共用体变量的各个成员赋值时,最近的一次赋值才是有效的。 3.共用体变量所占用的内存空间,是其占用空间最多的那一个成员所占用的空间,而结构体变量是其各个
文档评论(0)