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

上传人:M****1 文档编号:567669964 上传时间:2024-07-22 格式:PPT 页数:19 大小:138.50KB
返回 下载 相关 举报
结构体、共用体和枚举类型.ppt_第1页
第1页 / 共19页
结构体、共用体和枚举类型.ppt_第2页
第2页 / 共19页
结构体、共用体和枚举类型.ppt_第3页
第3页 / 共19页
结构体、共用体和枚举类型.ppt_第4页
第4页 / 共19页
结构体、共用体和枚举类型.ppt_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《结构体、共用体和枚举类型.ppt》由会员分享,可在线阅读,更多相关《结构体、共用体和枚举类型.ppt(19页珍藏版)》请在金锄头文库上搜索。

1、第第9 9章章 结构体、共用体和枚举类型结构体、共用体和枚举类型9.1 9.1 结构体的定义及应用结构体的定义及应用9.2 9.2 位域位域* *9.3 9.3 共用体的定义及应用共用体的定义及应用9.4 9.4 枚举类型枚举类型9.1 9.1 结构体的定义及应用结构体的定义及应用设每个学生的数据包括:设每个学生的数据包括:姓名:字符型数组姓名:字符型数组年龄:无符号整型年龄:无符号整型成绩:单精度浮点类型成绩:单精度浮点类型 如何存放如何存放1010位学生的原始数据?位学生的原始数据?解:解:定义定义3 3个数组分别存放个数组分别存放1010位学生的姓名、年龄和成绩,位学生的姓名、年龄和成绩

2、,用数组下标区别不同的学生:用数组下标区别不同的学生:char name1020; /char name1020; /存放存放1010位学生的姓名位学生的姓名intint age10; / age10; / 年龄年龄float score10; / float score10; / 成绩成绩 用用nameinamei、ageiagei 和和scoreiscorei 表示第表示第i i个学生数据。个学生数据。改进:改进: 定义结构体类型,描述同一学生的多个数据:定义结构体类型,描述同一学生的多个数据: structstruct studentstudent /反映同一学生数据间的联系反映同一学生

3、数据间的联系 char name20; / char name20; /姓名姓名 intint age; / age; /年龄年龄 float score; / float score; /成绩成绩 ; ; 定义定义studentstudent类型的数组,存放类型的数组,存放1010位学生的数据:位学生的数据: student s10; /student s10; /变量少变量少结构体可将不同类型的数据组织为一个整体。结构体可将不同类型的数据组织为一个整体。9.1.1 9.1.1 结构体类型的定义结构体类型的定义结构体类型需先定义后使用,其定义格式:结构体类型需先定义后使用,其定义格式: st

4、ructstruct 结构体类型名结构体类型名 类型类型1 1 成员成员1;1; 类型类型2 2 成员成员2; 2; ; ;说明说明: :结构体类型名用标识符表示。结构体类型名用标识符表示。成员可以是基本类型或导出类型的变量,不能指定存储类型成员可以是基本类型或导出类型的变量,不能指定存储类型为为autoauto、registerregister、externextern,但可指定存储类型为但可指定存储类型为staticstatic。定义结构体类型用分号定义结构体类型用分号“; ;”表示结束。表示结束。结构体类型是一个存储结构体类型是一个存储模型,本身不占内存,仅模型,本身不占内存,仅当定义其

5、变量时,系统才当定义其变量时,系统才按此存储模型为其变量分按此存储模型为其变量分配相应的内存。配相应的内存。9.1.2 9.1.2 结构体类型变量的定义结构体类型变量的定义定义结构体类型变量的格式为:定义结构体类型变量的格式为: 结构体类型名结构体类型名 变量列表变量列表; ;或或 structstruct 结构体类型名结构体类型名 变量列表变量列表; ; 其中,结构体类型名为已定义的类型;多个变量之间用逗其中,结构体类型名为已定义的类型;多个变量之间用逗号分隔;后一种格式与号分隔;后一种格式与C C兼容。兼容。例如:例如: student s1,s2,s310;student s1,s2,s

6、310;或或 structstruct student s1,s2,s310; student s1,s2,s310;studentstudent类型变量类型变量s1s1的内存分配图的内存分配图按按studentstudent类型的存储模型类型的存储模型为其变量为其变量s1s1分配内存。分配内存。studentstudent类型的存储模型所类型的存储模型所需内存字节数:需内存字节数: sizeof(studentsizeof(student) )s1s1变量各成员在内存中的顺变量各成员在内存中的顺序与其类型中成员说明的顺序与其类型中成员说明的顺序一致。序一致。name占占20字节字节age占占

7、4 4字节字节score占占4 4字节字节结构体类型变量也可在声明结构体类型的同时定义。结构体类型变量也可在声明结构体类型的同时定义。例如:例如: structstruct Date Date intint year,month,dayyear,month,day; ; today,yesterdaytoday,yesterday; ;再如:再如: structstruct / /定义一个无名结构类型定义一个无名结构类型 intint a; a; float b; float b; x,yx,y; ; 无名结构体类型不能在该类型定义之外定义其变量。无名结构体类型不能在该类型定义之外定义其变量。

8、9.1.2 结构体类型变量的定义结构体类型变量的定义结构体类型变量的初始化结构体类型变量的初始化结构体变量的初始化:与数组的初始化方式类似,在花括号结构体变量的初始化:与数组的初始化方式类似,在花括号中,按结构体成员说明的顺序依次列出其值。中,按结构体成员说明的顺序依次列出其值。例如:例如: student s1 student s1=Jenny,20,98=Jenny,20,98; ; Date today Date today=2007,1,2=2007,1,2; ; structstruct Complex Complex float float real,imagereal,image

9、; ; c1 c1=2.0f,3.0f=2.0f,3.0f,c2;,c2;结构体类型变量不能直接输入结构体类型变量不能直接输入/ /输出,其成员能否直接输入输出,其成员能否直接输入/ /输输出,取决于其成员的类型,若是基本类型或字符数组,则可直出,取决于其成员的类型,若是基本类型或字符数组,则可直接输入接输入/ /输出。如:输出。如: cincins1; /s1; /错误错误 cincins1.names1.ages1.score; /s1.names1.ages1.score; /正确正确 coutcouts1; /s1; /错误错误 coutcouts1.names1.ages1.scor

10、e;/s1.names1.ages1.score;/正确正确结构体类型变量做函数的形参时,调用函数的实参必须是相同结构体类型变量做函数的形参时,调用函数的实参必须是相同结构体类型的变量。参数的传递方式为结构体类型的变量。参数的传递方式为值传递值传递,系统将实参的,系统将实参的每个成员逐个拷贝给对应的形参成员。结构体类型变量也可做每个成员逐个拷贝给对应的形参成员。结构体类型变量也可做函数的返回值。函数的返回值。9.1.3 9.1.3 结构体类型变量的使用结构体类型变量的使用访问结构体变量成员的格式为:访问结构体变量成员的格式为: 结构体变量结构体变量. .成员名成员名 其中其中“.”“.”是成员

11、访问运算符。例如:是成员访问运算符。例如: today.yeartoday.year 表示访问结构体变量表示访问结构体变量todaytoday的成员的成员yearyear。相同结构体类型的变量之间可直接赋值相同结构体类型的变量之间可直接赋值。例如:。例如: structstruct weather weather double double temp,windtemp,wind; ; w1=7.5,3.2, w1=7.5,3.2,w2=w1;w2=w1; 其中其中“w2=w1;”w2=w1;”等同于:等同于: w2.temp=w1.temp; w2.wind=w1.wind;w2.temp=w

12、1.temp; w2.wind=w1.wind;例例9.1 9.1 编写求两分数之和的函数,并用它求编写求两分数之和的函数,并用它求1/8+5/241/8+5/24。例例9.2 9.2 电视台举报青年歌手大奖赛,请输入每位选手的姓电视台举报青年歌手大奖赛,请输入每位选手的姓名、编号及演唱得分、综合素质得分、新歌得分(演唱名、编号及演唱得分、综合素质得分、新歌得分(演唱新歌加新歌加0.30.3分),计算每人的总分,然后输出每人的全分),计算每人的总分,然后输出每人的全部信息。部信息。 9.3 9.3 共用体的定义及应用共用体的定义及应用共用体类型的定义格式:共用体类型的定义格式: union u

13、nion 共用体类型名共用体类型名 数据类型数据类型 成员名成员名1;1; 数据类型数据类型 成员名成员名2;2; ; ;在定义和使用形式上,共用在定义和使用形式上,共用体与结构体相似:由多个成体与结构体相似:由多个成员组成,成员的类型可以不员组成,成员的类型可以不同。同。在内存分配上,共用体与结在内存分配上,共用体与结构体有本质区别:结构体的构体有本质区别:结构体的每个成员都有自己的独占内每个成员都有自己的独占内存;而共用体的每个成员共存;而共用体的每个成员共用同一块内存。用同一块内存。共同体存储区域的大小由占共同体存储区域的大小由占用最大存储区的成员决定。用最大存储区的成员决定。例如:例如

14、: union union udataudata char c; char c; intint i; i; double d; double d; ; ;共用体类型定义后,即可定义其变量、数组、指针和引用等。共用体类型定义后,即可定义其变量、数组、指针和引用等。例如:例如: udataudata u1, / u1, /变量变量u1u1实际占用实际占用8 8字节内存字节内存 u210,u210, * *p=u2;p=u2;对共用体变量的操作与结构体变量类似。例如:对共用体变量的操作与结构体变量类似。例如: u1.c=a;u1.c=a; u1.i=25; u1.i=25; u1.d=15.2; u

15、1.d=15.2; 注意,当对变量注意,当对变量u1u1的成员的成员i i赋值时,覆盖了成员赋值时,覆盖了成员c c的值;类似的值;类似的当对成员的当对成员d d赋值时,又覆盖了成员赋值时,又覆盖了成员i i的值。同一时刻,只的值。同一时刻,只可使用其中的一个成员。可使用其中的一个成员。共用体可做函数的参数和返回值。共用体可做函数的参数和返回值。例:学生体能测试,男生测例:学生体能测试,男生测100100米,女生测跳绳。要求输入米,女生测跳绳。要求输入学生的体能测试数据并输出。学生的体能测试数据并输出。9.4 9.4 枚举类型枚举类型现实中有些数据只有有限几种取值。例如:现实中有些数据只有有限

16、几种取值。例如:交通灯的颜色:红、黄、绿;交通灯的颜色:红、黄、绿;人的性别:男、女;人的性别:男、女;一个星期:星期一、星期二、一个星期:星期一、星期二、星期日。、星期日。如何表达这些数据?如何表达这些数据?用用intint、charchar类型。例如,类型。例如,charchar型变量表示性别,用型变量表示性别,用m m和和f f分别表示男和女,其它字符则不合法,但编分别表示男和女,其它字符则不合法,但编译器无法检查出这类错误。译器无法检查出这类错误。用枚举类型:可更好解决这类问题。用枚举类型:可更好解决这类问题。枚举类型的定义枚举类型的定义定义枚举类型的格式为:定义枚举类型的格式为: e

17、numenum ; ; 枚举类型名为标识符,枚举量表由逗号隔开的标识符组成。枚举类型名为标识符,枚举量表由逗号隔开的标识符组成。枚举量表中的标识符称为枚举常量。枚举量表中的标识符称为枚举常量。例如:例如: enumenum weekdaySun,Mon,Tue,Wed,Thu,Fri,SatweekdaySun,Mon,Tue,Wed,Thu,Fri,Sat;定义枚举类型时,每个枚举常量对应一个整数值。定义枚举类型时,每个枚举常量对应一个整数值。若未指定枚举常量的值,则第若未指定枚举常量的值,则第1 1个枚举常量为个枚举常量为0 0,第,第2 2个枚个枚举常量为举常量为1 1,依次类推。,依次

18、类推。也可给枚举常量指定值。例如:也可给枚举常量指定值。例如: enumenum weekdaySunweekdaySun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;=7,Mon=1,Tue,Wed,Thu,Fri,Sat; 枚举类型变量的定义枚举类型变量的定义枚举变量的定义格式:枚举变量的定义格式: 枚举类型名枚举类型名 变量名变量名; ;或或 enumenum 枚举类型名枚举类型名 变量名变量名; ; / /与与C C兼容兼容例如:例如: weekday weekday workday, weekendworkday, weekend; ; 枚举变量枚举变量workdaywo

19、rkday和和weekendweekend的值只能是的值只能是SunSun到到SatSat之一。之一。也可在定义枚举类型时定义枚举变量。例如:也可在定义枚举类型时定义枚举变量。例如: enumenum weekday weekday Sun,Mon,Tue,Wed,Thu,Fri,SatSun,Mon,Tue,Wed,Thu,Fri,Sat day1,day2day1,day2; ;枚举类型变量的使用枚举类型变量的使用赋值运算:枚举常量赋给枚举类型变量,或同类型的枚举类赋值运算:枚举常量赋给枚举类型变量,或同类型的枚举类型变量之间相互赋值。例如:型变量之间相互赋值。例如: day1=Sun;

20、day2=day1;day1=Sun; day2=day1; 不能将一个整数直接赋给枚举类型变量。不能将一个整数直接赋给枚举类型变量。例如:例如: enumenum ColorRed,Green,Yellowc1,c2; ColorRed,Green,Yellowc1,c2; c1=Yellow; / c1=Yellow; /正确正确 c2=1; /c2=1; /错误错误 可用强制类型转换把整数赋给枚举类型变量可用强制类型转换把整数赋给枚举类型变量。例如:。例如: c2=(Color)1; / c2=(Color)1; / 或或c2=Color(1);c2=Color(1); 其效果等价于:其

21、效果等价于: c1=Green;c1=Green;枚举类型变量的使用枚举类型变量的使用关系运算:关系运算:枚举值进行比较时,比较的是它们对应的整型值枚举值进行比较时,比较的是它们对应的整型值的大小。例如的大小。例如c1c2c1c2的运算结果为的运算结果为truetrue。输出:直接输出枚举变量时,输出的是枚举变量对应的整数输出:直接输出枚举变量时,输出的是枚举变量对应的整数。如需输出对应的字符串,必须通过代码进行转换。如需输出对应的字符串,必须通过代码进行转换。输入:不能直接输入枚举类型变量的值,输入:不能直接输入枚举类型变量的值,例如:例如: cincinday1; /day1; /错误错误 对于枚举值的输入,通常通过输入一个整型值,然后把该整对于枚举值的输入,通常通过输入一个整型值,然后把该整型值转换成一个枚举值。型值转换成一个枚举值。例例9.4 9.4 输入输入/ /输出枚举类型的值。输出枚举类型的值。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号