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

上传人:zhu****ei 文档编号:2850859 上传时间:2019-12-02 格式:PPT 页数:19 大小:138.50KB
返回 下载 相关 举报
结构体、共用体和枚举类型.ppt_第1页
第1页 / 共19页
结构体、共用体和枚举类型.ppt_第2页
第2页 / 共19页
结构体、共用体和枚举类型.ppt_第3页
第3页 / 共19页
点击查看更多>>
资源描述
第9章 结构体、共用体和枚举类型,9.1 结构体的定义及应用 9.2 位域* 9.3 共用体的定义及应用 9.4 枚举类型,9.1 结构体的定义及应用,设每个学生的数据包括: 姓名:字符型数组 年龄:无符号整型 成绩:单精度浮点类型 如何存放10位学生的原始数据? 解:定义3个数组分别存放10位学生的姓名、年龄和成绩,用数组下标区别不同的学生: char name1020; /存放10位学生的姓名 int age10; / 年龄 float score10; / 成绩 用namei、agei和scorei表示第i个学生数据。,改进: 定义结构体类型,描述同一学生的多个数据: struct student/反映同一学生数据间的联系 char name20; /姓名 int age; /年龄 float score; /成绩 ; 定义student类型的数组,存放10位学生的数据: student s10; /变量少 结构体可将不同类型的数据组织为一个整体。,9.1.1 结构体类型的定义,结构体类型需先定义后使用,其定义格式: struct 结构体类型名 类型1 成员1; 类型2 成员2; ;,说明: 结构体类型名用标识符表示。 成员可以是基本类型或导出类型的变量,不能指定存储类型为auto、register、extern,但可指定存储类型为static。 定义结构体类型用分号“;”表示结束。,结构体类型是一个存储模型,本身不占内存,仅当定义其变量时,系统才按此存储模型为其变量分配相应的内存。,9.1.2 结构体类型变量的定义,定义结构体类型变量的格式为: 结构体类型名 变量列表; 或 struct 结构体类型名 变量列表; 其中,结构体类型名为已定义的类型;多个变量之间用逗号分隔;后一种格式与C兼容。 例如: student s1,s2,s310; 或 struct student s1,s2,s310;,student类型变量s1的内存分配图,按student类型的存储模型为其变量s1分配内存。 student类型的存储模型所需内存字节数: sizeof(student) s1变量各成员在内存中的顺序与其类型中成员说明的顺序一致。,name 占20字节,age 占4字节,score 占4字节,结构体类型变量也可在声明结构体类型的同时定义。 例如: struct Date int year,month,day; today,yesterday; 再如: struct /定义一个无名结构类型 int a; float b; x,y; 无名结构体类型不能在该类型定义之外定义其变量。,9.1.2 结构体类型变量的定义,结构体类型变量的初始化,结构体变量的初始化:与数组的初始化方式类似,在花括号中,按结构体成员说明的顺序依次列出其值。 例如: student s1=“Jenny“,20,98; Date today=2007,1,2; struct Complex float real,image; c1=2.0f,3.0f,c2;,结构体类型变量不能直接输入/输出,其成员能否直接输入/输出,取决于其成员的类型,若是基本类型或字符数组,则可直接输入/输出。如: cins1; /错误 cins1.names1.ages1.score; /正确 couts1; /错误 couts1.names1.ages1.score;/正确 结构体类型变量做函数的形参时,调用函数的实参必须是相同结构体类型的变量。参数的传递方式为值传递,系统将实参的每个成员逐个拷贝给对应的形参成员。结构体类型变量也可做函数的返回值。,9.1.3 结构体类型变量的使用,访问结构体变量成员的格式为: 结构体变量.成员名 其中“.”是成员访问运算符。例如: today.year 表示访问结构体变量today的成员year。 相同结构体类型的变量之间可直接赋值。例如: struct weather double temp,wind; w1=7.5,3.2,w2=w1; 其中“w2=w1;”等同于: w2.temp=w1.temp; w2.wind=w1.wind;,例9.1 编写求两分数之和的函数,并用它求1/8+5/24。 例9.2 电视台举报青年歌手大奖赛,请输入每位选手的姓名、编号及演唱得分、综合素质得分、新歌得分(演唱新歌加0.3分),计算每人的总分,然后输出每人的全部信息。,9.3 共用体的定义及应用,共用体类型的定义格式: union 共用体类型名 数据类型 成员名1; 数据类型 成员名2; ;,在定义和使用形式上,共用体与结构体相似:由多个成员组成,成员的类型可以不同。 在内存分配上,共用体与结构体有本质区别:结构体的每个成员都有自己的独占内存;而共用体的每个成员共用同一块内存。 共同体存储区域的大小由占用最大存储区的成员决定。,例如: union udata char c; int i; double d; ; 共用体类型定义后,即可定义其变量、数组、指针和引用等。例如: udata u1, /变量u1实际占用8字节内存 u210, *p=u2;,对共用体变量的操作与结构体变量类似。例如: u1.c=a; u1.i=25; u1.d=15.2; 注意,当对变量u1的成员i赋值时,覆盖了成员c的值;类似的当对成员d赋值时,又覆盖了成员i的值。同一时刻,只可使用其中的一个成员。 共用体可做函数的参数和返回值。 例:学生体能测试,男生测100米,女生测跳绳。要求输入学生的体能测试数据并输出。,9.4 枚举类型,现实中有些数据只有有限几种取值。例如: 交通灯的颜色:红、黄、绿; 人的性别:男、女; 一个星期:星期一、星期二、星期日。 如何表达这些数据? 用int、char类型。例如,char型变量表示性别,用m和f分别表示男和女,其它字符则不合法,但编译器无法检查出这类错误。 用枚举类型:可更好解决这类问题。,枚举类型的定义,定义枚举类型的格式为: enum ; 枚举类型名为标识符,枚举量表由逗号隔开的标识符组成。枚举量表中的标识符称为枚举常量。 例如: enum weekdaySun,Mon,Tue,Wed,Thu,Fri,Sat; 定义枚举类型时,每个枚举常量对应一个整数值。 若未指定枚举常量的值,则第1个枚举常量为0,第2个枚举常量为1,依次类推。 也可给枚举常量指定值。例如: enum weekdaySun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;,枚举类型变量的定义,枚举变量的定义格式: 枚举类型名 变量名; 或 enum 枚举类型名 变量名; /与C兼容 例如: weekday workday, weekend; 枚举变量workday和weekend的值只能是Sun到Sat之一。 也可在定义枚举类型时定义枚举变量。例如: enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat day1,day2;,枚举类型变量的使用,赋值运算:枚举常量赋给枚举类型变量,或同类型的枚举类型变量之间相互赋值。例如: day1=Sun; day2=day1; 不能将一个整数直接赋给枚举类型变量。例如: enum ColorRed,Green,Yellowc1,c2; c1=Yellow; /正确 c2=1; /错误 可用强制类型转换把整数赋给枚举类型变量。例如: c2=(Color)1; / 或c2=Color(1); 其效果等价于: c1=Green;,枚举类型变量的使用,关系运算:枚举值进行比较时,比较的是它们对应的整型值的大小。例如c1c2的运算结果为true。 输出:直接输出枚举变量时,输出的是枚举变量对应的整数。如需输出对应的字符串,必须通过代码进行转换。 输入:不能直接输入枚举类型变量的值,例如: cinday1; /错误 对于枚举值的输入,通常通过输入一个整型值,然后把该整型值转换成一个枚举值。 例9.4 输入/输出枚举类型的值。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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