第8章(4) 共用体和枚举类型.ppt_第1页
第8章(4) 共用体和枚举类型.ppt_第2页
第8章(4) 共用体和枚举类型.ppt_第3页
第8章(4) 共用体和枚举类型.ppt_第4页
第8章(4) 共用体和枚举类型.ppt_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、8.3 共用体,8.3.1 共用体变量的定义 8.3.2 共用体变量的引用,8.3.1 共用体的定义,在实际处理中为了方便处理,有时需要在不同的时刻将不同类型的值存放在同一变量中,而在任一时刻,该变量仅含特定类型的值,这种变量就是共用体类型的变量(或联合体类型的变量)。 共用体的定义方式就是将struct用union代替,其它形式同结构相同。如:假定一个常量可能是int、double或字符串,为了用同一个存储区域来存放,可以说明如下的共用体:,union unode int n; double a; char c1; u;,u.n占前四个字节,u.a 占前8个字节,u.c1 占前1个字节,分配

2、存储单元时,编译程序按共用体的成员中最长的那一个类型为共用体变量分配存储空间。,给一个共用体成员赋值,会破坏其他成员的值,int main() u.n=5; printf(%dn,u.n); printf(%fn,u.a); printf(%cn,u.c1); printf(%snn, u.c1); u.c1=a; printf(%dn,u.n); printf(%fn,u.a); printf(%cn,u.c1); printf(%snn, u.c1); strcpy(u.c,abcdefgh); printf(%dn,u.n); printf(%fn,u.a); printf(%cn,u.

3、c1); printf(%snn, u.c1); ,#include #include union unode int n; double a; char c1; char c9; u;,运行以上程序,体会公用体额所有成员共享同一个存储单元,8.3.2 共用体变量的引用,共用体成员的引用和结构成员的引用形式相同,一般为下列三种形式之一: 共用体变量名.成员名 指向共用体变量的指针-成员名 (*指向共用体变量的指针).成员名 注意:共用成员彼此不是并存的,任一时刻共用体变量中只含有其中一个成员,该成员是最近一次存入共用体的那一个成为当前成员。 和结构体变量类似,C语言允许两个相同类型的共用体变量

4、之间相互赋值。 C语言不允许使用共用体变量作为函数参数,但可以使用指向共用体变量的指针。,8.4 枚举类型和自定义类型,8.4.1 枚举类型 8.4.2 自定义类型,枚举:一一列举 将只有几种可能值的变量定义为枚举类型 类型定义形式: 枚举类型变量的定义:,enum 类型名值列表;,例 enum weekday sun, mon, tue, wed, thu, fri, sat;,enum weekday workday1,weekday2;,8.4.1 枚举类型,C编译对枚举元素按常量处理,故称枚举常量,不能赋值 默认枚举元素的值按定义时的顺序自0开始,也可由程序员指定,这里sun代表常量0

5、,mon代表常量1.,在下列程序段中,枚举变量c1和c2的值分别是( )和( ) int main( ) enum color red, yellow, blue, green, white c1, c2; c1=yellow; c2=white; printf(“%d,%dn”, c1, c2); return 0; A. 1 B. 2 C. 3 D. 4,在下列程序段中,枚举变量c1和c2的值分别是( )和( )。 int main( ) enum color red,yellow, blue=4, green,white c1, c2; c1=yellow; c2=white; prin

6、tf(“%d,%dn”, c1, c2); return 0; A. 1 B. 3 C. 5 D. 6,如果在定义类型时改变某枚举元素的值,以后的值顺序加1。Blue被指定为4,则green为5,while为6,例:已知今天是星期天,编程求若干天后是星期几。,#include main() int n; enum sun,mon,tue,wed,thu,fri,sat day; char weekday77=星期天,星期一,星期二,星期三, 星期四,星期五,星期六; printf(输入间隔天数:); scanf(%d, ,8.4.2 自定义类型,typedef说明用于为已存在的类型名定义一个别

7、名。typedef说明的一般形式 typedef类型区分符说明符表; 其中,说明符表中的说明符是类型定义名。类型区分符可以是任何基本类型、结构或联合类型区分符,也可以是由typedef定义的类型名。为了醒目,一般由typedef定义的类型名使用大写,例如 typedefint LENGTH; 定义LENGTH是int的别名,它可以和int一样说明变量或函数。,课后练习,1. 下列说明正确的是( ) A. typedef int INTEG; INTEG n, m; B. typedef int char; char n, m; C. typedef m4 ARRAY; ARRAY n, m;

8、D. 以上都错误,2. 以下程序的输出结果为( )。 typedef union long x2; int y4; char z8; TRY; TRY tr; int main( ) printf(“%dn”, sizeof(tr); return 0; A. 32 B. 16 C. 8 D. 4,3. 根据下面的定义,能输出字母M的语句为( )。 struct person char name9; int age; ; struct person class10=“John”,17,“Paul”,19,“Mary”,18; A. printf(“%cn”,); B. p

9、rintf(“%cn”,1); C. printf(“%cn”,1); D. printf(“%cn”,0);,4. 以下程序的运行结果为( )。 struct node int x; char c; ; int main( ) struct node a=10,x; func(a); printf(“%d, %c”, a.x, a.c); return 0; func(struct node b) b.x=20; b.c=x; 10,x B. 20,x C. 10 x D. 20 x,5. 以下程序的运行结果为( )。 struct node int x; char c; ; int main( ) struct node a=10,x; func( 10,x B. 20,x C. 10 x D. 20 x,6. 若已建立如下链表结构,指针p和s分别指向下图所示结点,则能够将指针s指向的结点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论