结构体、共用体和枚举类型.ppt

上传人:max****ui 文档编号:8601154 上传时间:2020-03-30 格式:PPT 页数:31 大小:124KB
返回 下载 相关 举报
结构体、共用体和枚举类型.ppt_第1页
第1页 / 共31页
结构体、共用体和枚举类型.ppt_第2页
第2页 / 共31页
结构体、共用体和枚举类型.ppt_第3页
第3页 / 共31页
点击查看更多>>
资源描述
第8章结构体 共用体和枚举类型 8 1结构体类型8 2结构体指针8 3共用体8 4枚举类型 首先我们来看一个问题 假设有一个学生成绩表 记录每个学生的学号 姓名以及一些课程的成绩 成绩表如下所示 8 1 1结构体类型的定义 结构体是一种构造类型 自定义类型 除了结构体变量需要定义后才能使用外 结构体的类型本身也需要定义 结构体由若干 成员 组成 每个成员可以是一个基本的数据类型 也可以是一个已经定义的构造类型 结构体类型定义的一般形式为 struct结构类型名 类型1成员1 类型2成员2 类型n成员n 下面定义一个有关学生成绩的结构体类型 structscore intno charname 20 intenglish intmath intcomputer intclang 8 1 2结构体变量的定义与引用 1 结构体变量的定义下面以前面定义的score结构类型为例来加以说明 1 先定义结构类型 再定义结构变量 如 structscore intno charname 20 intenglish intcomputer intclang structscorestu1 stu2 定义了两个变量stu1和stu2为score结构类型 2 在定义结构类型的同时定义结构变量 例如 structscore intno charname 20 intenglish intmath intcomputer intclang stu1 stu2 3 也可以直接定义结构变量 例如 struct intno charname 20 intenglish intmath intcomputer intclang stu1 stu2 2 结构体变量的引用 1 结构成员的表示方式引用结构成员的一般形式为 结构变量 成员名如果将 结构变量 成员名 看成一个整体 则这个整体的数据类型与结构中该成员的数据类型相同 这样就可像前面所讲的变量那样使用结构变量了 例8 1 从键盘上输入一个人的姓名 年龄 性别和身高 然后将它们打印出来 include stdio h main structperson charname 20 intage intsex floatheight person1 printf pleaseinputname n scanf s person1 name printf pleaseinputage n scanf d 2 结构变量的赋值 例8 2 给结构变量赋值并输出其值 include stdio h main structstu intnum char name charsex floatscore stu1 stu2 stu1 num 101 stu1 name 张三 printf 请输入性别和成绩 n scanf c f 3 结构变量的初始化 例8 3 外部结构变量初始化 include stdio h structstudent 定义外部结构变量 intnum char name charsex floatscore stu2 stu1 101 张三 M 90 main stu2 stu1 printf 学号 d n姓名 s n stu2 num stu2 name printf 性别 c n成绩 f n stu2 sex stu2 score 例8 4 静态结构变量初始化 include stdio h main staticstructstudent 定义静态结构变量 intnum char name charsex floatscore stu2 stu1 101 张三 M 90 stu2 stu1 printf 学号 d n姓名 s n stu2 num stu2 name printf 性别 c n成绩 f n stu2 sex stu2 score 8 1 3结构体数组 结构数组就是具有相同结构类型的变量集合 结构数组的每一个元素都是具有相同结构类型的下标结构变量 在实际应用中 经常用结构数组来表示具有相同数据结构的一个群体 如一个班的学生档案 一个单位的职工资料等 假如要记录一个班级同学的姓名 性别 年龄和住址 就可以定义为一个结构数组 如下所示 struct charname 8 charsex 2 intage charaddr 40 student 30 此处定义了一个结构数组student 共有30个数组元素 student 0 student 29 每个数组元素都具有structstudent的结构形式 对外部结构数组或静态结构数组可以作初始化赋值 例如 structstu intnum char name charsex floatscore boy 5 101 Liping M 45 102 Zhangping M 62 5 103 Hefang F 92 5 104 Chengling F 87 105 Wangming M 58 当对全部元素作初始化赋值时 也可不给出数组长度 例8 5 计算学生的平均成绩和不及格的人数 include stdio h structstu intnum char name charsex floatscore boy 5 101 Liping M 45 102 Zhangping M 62 5 103 Hefang F 92 5 104 Chengling F 87 105 Wangming M 58 main inti c 0 floatave s 0 for i 0 i 5 i s boy i score if boy i score 60 c 1 printf s f n s ave s 5 printf average f ncount d n ave c 例8 6 通讯录 include stdio h defineNUM3structmem charname 20 charphone 10 main structmemman NUM inti for i 0 i NUM i printf inputname n gets man i name printf inputphone n gets man i phone printf name t t tphone n n for i 0 i NUM i printf s t t t s n man i name man i phone 8 2结构体指针8 2 1指向结构体变量的指针结构变量被定义以后 系统将在进行编译时为其分配一定的存储空间 故结构变量与普通变量一样有一个存储空间的起始地址 因此可以定义一个指针变量用来存储结构变量的起始地址 称为指向结构的指针变量 结构指针变量中的值是所指向的结构变量存储空间的首地址 通过结构指针即可访问该结构变量 这与数组指针和函数指针的情况是相同的 结构指针变量说明的一般形式为 struct结构名 结构指针变量名例如 structperson char name intage intsex person1 p 例8 8 结构指针变量的使用方法举例 include stdio h structstu intnum char name charsex floatscore boy1 102 ZhangSan M 88 pstu main pstu 8 2 2指向结构体数组的指针可以定义一个指针变量指向一个结构数组 这时结构指针变量的值是整个结构数组的首地址 结构指针变量也可指向结构数组的一个元素 这时结构指针变量的值是该结构数组元素的首地址 设p为指向结构数组的指针变量 则p也指向该结构数组的0号元素 p 1指向1号元素 p i则指向i号元素 这与普通数组的情况是一致的 8 2 3用结构体变量和指向结构体的指针做函数参数在C语言中允许用结构变量作函数参数进行整体传送 但是这种传送要将全部成员逐个传送 特别是成员为数组时将会使传送的时间和空间开销很大 会对程序的执行效率造成负面影响 一种较好的办法就是使用指针作为函数参数进行数据传送 这时由实参传向形参的只是地址 从而能够达到减少程序运行时间和空间上开销的目的 8 2共用体 共用体 又称联合 与 结构 有一些相似之处 但两者又有本质上的不同 在结构中各成员有各自独立的存储空间 结构变量的总存储空间是各成员存储空间之和 而在 共用体 中 各成员共享一段存储空间 一个共用体变量的存储空间等于各成员中存储空间最多的成员的存储空间 应该说明的是 这里所谓的共享不是指把多个成员同时装入一个共用体变量内 而是指该共用体变量可被赋予任一成员值 但每次只能赋一种值 赋入新值则冲去旧值 一个共用体类型必须经过定义之后 才能把变量说明为该共用体类型 8 2 1共用体类型的定义定义一个共用体类型的一般形式为 union共用体名 成员表 成员表中含有若干成员 成员的一般形式为 类型说明符成员名成员名的命名应符合C语言有关标识符的规定 例如 unionperdata intclass charoffice 10 定义了一个名为perdata的共用体类型 它含有两个成员 一个为整型 成员名为class 另一个为字符数组 数组名为office 共用体定义之后 即可进行共用体变量说明 被说明为perdata类型的变量 可以存放整型量class或存放字符数组office 8 2 2共用体变量的定义与引用共用体变量的说明和结构变量的说明方式相同 也有三种形式 即先定义 再说明 定义的同时进行说明和直接说明 共用体变量的成员表示为 共用体变量名 成员名例如 a被说明为perdata类型的变量之后 可使用a class或a office进行访问 而不允许只用共用体变量名作赋值或其它操作 也不允许对共用体变量作初始化赋值 赋值只能在程序中进行 还需强调说明的是 一个共用体变量 每次只能赋予一个成员值 即某一个共用体变量的值在程序运行的某一时刻只能是共用体变员的某一个成员的值 例8 11 定义一个共用体类型 用于存储教师或学生的信息 编程输入相关信息并输出 include stdio h main struct charname 10 intage charjob union intclass charoffice 10 depa body 2 intn i for i 0 i 2 i printf inputname age jobanddepartment n scanf s d c body i name 8 3 1枚举类型的定义定义枚举类型定义的一般形式为 enum枚举名 枚举值表 在枚举值表中应列出所有可用值 这些值也称为枚举元素 例如 enumweekday sun mou tue wed thu fri sat 8 3 2枚举类型变量的赋值和使用枚举类型在使用中有以下规定 1 枚举值是常量 不是变量 不能在程序中用赋值语句再对它赋值 例如对枚举weekday的元素再作以下赋值 sun 5 mon 2 sun mon 都是错误的 2 枚举元素本身由系统定义了一个表示序号的数值 从0开始顺序定义为0 1 2 如在weekday中 sun值为0 mon值为1 sat值为6 8 3枚举类型 请看下例 include stdio h main enumweekday sun mon tue wed thu fri sat a b c a sun b mon c tue printf d d d a b c 程序输出 0 1 2
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!