第10章共用体与枚举.ppt

上传人:本田雅阁 文档编号:3418057 上传时间:2019-08-23 格式:PPT 页数:24 大小:180.54KB
返回 下载 相关 举报
第10章共用体与枚举.ppt_第1页
第1页 / 共24页
第10章共用体与枚举.ppt_第2页
第2页 / 共24页
第10章共用体与枚举.ppt_第3页
第3页 / 共24页
第10章共用体与枚举.ppt_第4页
第4页 / 共24页
第10章共用体与枚举.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《第10章共用体与枚举.ppt》由会员分享,可在线阅读,更多相关《第10章共用体与枚举.ppt(24页珍藏版)》请在三一文库上搜索。

1、1,第10章 共用体与枚举,C语言程序设计,华北电力大学计算机科学系 C语言课程组,2,学习目标,理解共用体概念以及在编程中的作用 掌握结构体类型和共用体类型的差别 理解枚举概念以及在编程中的作用 掌握使用typedef定义新类型的方法及作用,3,10.1共用体,10.1.1 共用体概念 【例】教师和学生填表问题,职业: “教师”或“学生” 单位: 学生 班级编号 整型量表示 教师 某系某教研室 字符数组类型表示 问题:如何把这两种类型不同的数据都填入“单位”这个变量中呢? 语言提供了一种称为共用体(联合)的类型。,4,如要求“班级”和“教研室”这两种类型不同的数据都填入“单位”这个变量中,

2、就必须把“单位”定义为包含整型和字符型数组这两种类型的“共用体”,如下: union perdata int class; char office10; ;,5,1、共用体类型定义 union 共用体名 类型说明符 成员名1; 类型说明符 成员名2; . 类型说明符 成员名n; ;,关键字,6,第2种: union perdata int class; char office10; a,b;,第3种 union int class; char office10; a,b,7,2、共用体变量的声明,以perdata类型为例,声明如下: 第1种 union perdata int class; c

3、har officae10; ; union perdata a,b; /*声明a,b为perdata类型*/,8,说明,共用体变量和结构体变量含义不同: 结构体变量所占内存长度是各成员的内存长度之和 共用体变量所占内存长度是最长成员的长度。 如perdata类型的变量a和b都为10个字节,即office数组的长度。a,b变量如赋整型数据时,只使用了2个字节,而赋字符数组时,可用10个字节。,9,3、共用体的引用 先定义共用体变量后才可以引用它。不能引用共用体变量本身,只能引用其中的成员。 例如:printf(d,a);是错误的 printf(d,aclass);是正确的,10,4共用体类型特

4、点 (1)同一内存段可放几种不同类型的成员,但每一瞬间只能存放一种。 例: union data int i; char ch; float f; a,b,c; ai1; ac=a; af2.1; printf(f,af);是可以的。 printf(c,ac);无效,11,(2)共用体变量地址及其各成员地址都是同一地址。即&a,&ai,&ac,&af值相同。 (3)不能对共用体变量名赋值。也不能定义时进行初始化。 (4)不能把共用体变量作为函数参数,也不能使函数返回共同体变量,但可以使用指向共用体的指针。 (5)允许定义共用体数组。,12,10.1.2 人员管理,【例10-1】 设有一个教师与

5、学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。编程输入人员数据, 再以表格输出。,#include #include struct person char name10; int age; char job10; union int mclass; char office20; depa; ,13,void main() struct person body2; int n,i; for(i=0;i2;i+) printf(“input name,age,job and departmentn“); scanf(“%s%d%s“,bodyi.name

6、, ,14,10.2 枚举,10.2.1 枚举概念 1枚举类型的定义,例如: enum weekday sun,mou,tue,wed,thu,fri,sat ; 一般形式 enum 枚举名 枚举值表 ; enum是关键字,定义枚举类型必须用enum开头。 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。,15,2.枚举变量的声明 先定义,后声明 enum weekday . ; enum weekday a,b,c; 或者为: enum weekday,16,10.2.2枚举类型应用,【例10-2】星期枚举类型定义 #include enum weekday sun,mon,tue,w

7、ed,thu,fri,sat a,b,c; main() a=sun; b=mon; c=tue; printf(“%d,%d,%dn“,a,b,c); ,运行结果 0,1,2 Press any key to continue,17,10.2.3 星期几的计算,【例10-3】 编写程序,要求输入当天是星期几,就可以计算并输出n天后是星期几。例如,今天是星期六,若求3天后是星期几,则输入6,3,即输出“3天后是星期2”。 源程序如下:,18,#include enum week sun,mon,tue,wed,thu,fri,sat; enum week day(enum week w,int

8、 n) return (enum week)(int)w+n)%7); void main() enum week w0,wn; int n; printf(“输入当天为星期几和过的天数:n“); scanf(“%d%d“, ,19,枚举类型在使用中有以下规定,1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值: sun=5;mon=2;sun=mon; 都是错误的。 2. 枚举元素值从0 开始顺序定义为0,1,2。如在weekday中,sun值为0,mon值为1,sat值为6。 3. 只能把枚举值赋予枚举变量,不能把整型数值直接赋予枚举

9、变量。如: a=sum;b=mon; 是正确的。而: a=0;b=1; 是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如: a=(enum weekday)2;其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: a=tue; 还应该说明的是枚举元素不是字符常量也不是字符串常量, 使用时不要加单、双引号。,20,10.3 用typedef定义类型,【例】 定义变量a,b: int a,b; 采用如下方法定义: typedef int INTEGER INTEGER a,b; 两种方法完全等效,关键字,为int类型 定义的别名,21,定义一个新的类型名,typedef定义的一般形

10、式为: typedef 原类型名 新类型名,步骤如下: 1、按定义变量的方法写出定义体(如:int data); 2、将变量名换成新类型名(如data 换成DATATYPE); 3、在前面加上typedef (如:typedef int DATATYPE); 3、然后可以用新类型名去定义变量(如:DATATYPE md1);,22,例:定义结构体类型 typedef struct stu char name20; int age; char sex; STU; STU body1,body2;,23,例:定义数组类型 typedef char NAME20; NAME a1,a2,s1,s2; 完全等效于: char a120,a220,s120,s220,24,小结,(1)共用体是一种构造类型,各成员不能同时存在。同一时刻,只有一个成员存在于内存中,共用体变量长度是最长的成员的长度。 (2)共用体变量不能作为函数的参数,函数也不能返回指向共用体的指针。 (3)枚举是一种基本数据类型。枚举变量的取值是有限的,枚举元素是常量,不是变量。枚举元素和整数属于不同类型。 (4)类型定义typedef向用户提供了一种自定义类型说明手段,可以给任何类型取一个符合习惯的可读性强的别名。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1