C语言第11章3共用体课件_第1页
C语言第11章3共用体课件_第2页
C语言第11章3共用体课件_第3页
C语言第11章3共用体课件_第4页
C语言第11章3共用体课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、 11.4 共用体一、共用体的定义 在 C语言中,共用体表示几个变量共用一个内存单元,这些变量可以是不同的类型。共用体的定义与结构体的定义十分相似,共用体类型的定义形式为:union 共用体名成员表列;实 型 变 量f整 型 ich1000 地址union type int i; char ch; float f; a; 第1页,共18页。共用体变量的定义: 类型与变量同时给出 union type1 int i; char ch; float f; a,b,c; 只给出变量名 union int i; char ch; float f; a,b,c; 类型与变量分别给出 union type

2、1 int i; char ch; float f; ; union type1 a,b,c; 结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有自己的内存单元。 共用体变量所占的内存长度等于占用内存单元最长的成员的长度。第2页,共18页。二 . 共用体变量的引用 只有先定义了共用体变量才能引用它,而且不能直接引用共用体变量,只能引用共用体变量中的成员。例如上面定义a,b,c共用体变量,则可引用: a.i a.ch a.f三 . 共用体数据类型的特点1. 每一瞬时只有一个成员起作用;2. 共用体变量中起作用的成员是最后一次存放的成 员;3. 共用体变量的地址和它的各成员的地址都是

3、同一 地址;第3页,共18页。 4. 不能对共用体变量名赋值,也不能企图引用变量名来得到成员的值,又不能在定义共用体变量时对它初始化; 5. 不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针; 6. 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。第4页,共18页。二、共用体变量的应用 1. 在数据处理中,常用一个数据空间存放不同的对象。 例如:将人员定义成下面的结构体:struct long num; char name20; char sex; char job; union int class; char group20; addres

4、s; person10;第5页,共18页。 在该结构体变量中,学校人员的号码(num)、姓名(name)和性别(sex)是通用的,而根据职业(job)不同输入不同的单位。如果job项输入s(学生),则应接收一个班号给class,如果job项输入t(教师),则输入其工作单位给group。例如: scanf(%c,&person0.job);if(person0.job=s) scanf(%d,&person0.address.class);else if(person0.job=t) scanf(%s,person0.address.group); 第6页,共18页。2. 便于不同类型间的转换

5、例1: 将一个整数按字节输出其内容 程序运行结果为:i=3731ch0=31,ch1=37ch0=1,ch1=7main( )union int_char int i; char ch2; k; k.i=14129; printf(i=%xn,k.i); printf(ch0=%x,ch1=%xn, k.ch0,k.ch1); printf( ch0=%c,ch1=%cn, k.ch0,k.ch1);0 0 1 1 0 0 0 1 0 0 1 1 0 1 1 1ich0ch1第7页,共18页。三、共用体变量作为函数参数 例3union int_char int i; char ch2; ;ma

6、in()union int_char k; void int_to_char (); k.i=14129; int_to_char(k);void int_to_char(x) union int_char x; printf(ch0=%x,ch1=%xn ch0=%c,ch1=%cn, x.ch0,x.ch1, x.ch0,x.ch1); 第8页,共18页。四、用指向共用体类型的指针变量作函数参数 例4union int_char int i; char ch2;main() union int_char k,*p; void int_to_char(); k.i=14129; p=&k;

7、int_to_char(p);void int_to_char(x)union int_char *x; printf(ch0=%x,ch1=%xnch0=%c,ch1=%cn,x-ch0,x-ch1,x-ch0,x-ch1);第9页,共18页。 11.5 枚举类型 定义枚举类型用enum开头,其一般形式为: enum 枚举名枚举表; 例如,把每周中表示某天的枚举类型定义如下:enum weekday sun,mon,tue,wed,thu,fri,sat day1,day2; day1=sun;day2=fri;枚举类型枚举变量枚举常量第10页,共18页。说明: 1. 枚举元素按常量处理,

8、不能对枚举常量赋值。 如:sun=0; mon=1; 是错误的 2. 枚举元素是有值的,编译系统按定义时的顺序使它们的值分别为0,1,2,3,4,. main( ) enum weekday sun,mon,tue,wed,thu,fri,sat day1,day2; day1=sun;day2=fri; printf(%d %d,day1, day2); 输出结果为:0 5 第11页,共18页。3. 可以改变枚举元素的值。 main( ) enum weekday sun=7,mon=1,tue,wed,thu,fri,sat day1,day2; day1=sun;day2=fri; pr

9、intf(%d %d,day1, day2); 输出结果为:7 5 4. 一个整数不能直接赋给一个枚举变量。 如: day1=2 是错误的 day1=(enum weekday)2 是正确的day1=tue;强制类型转换第12页,共18页。 5. 枚举常量不是字符串,不能用下面方法输出字符串“fri”: printf(%s,fri); 错误 printf(%d,fri); 正确 6. 枚举变量可以用作循环变量,并且可以对枚举循环变量进行自增和自减运算第13页,共18页。 例1: main( ) enum color_enum red,yellow,blue,white,black color;

10、 for(color=red;color=black;color+) switch(color) case red : printf(redn);break; case yellow:printf(yellown);break; case blue:printf(bluen);break; case white:printf(whiten);break; case black:printf(blackn); 第14页,共18页。 C语言提供了用typedef定义新的类型名代替已有的类型名。 例: typedef int INTEGER; typedef float REAL; 则以下对变量的定

11、义等价: int i,j; float a,b; INTEGER i,j; REAL a,b; 定义一个新的类型名的方法: (1) 先按定义变量的方法写出定义体(如int i;). (2) 将变量名换成新类型名(将i换成INTEGER). (3) 在最前面加typedef. (4) 然后可以用新类型名去定义变量. 11.6 自定义类型第15页,共18页。说明: 1. 用typedef可以定义各种类型名, 但不能用来定义变量; 2. 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型; 3. typedef与#define有相似之处, 但并不相同; typedef int C

12、OUNT; #define COUNT int typedef int NUM10; 4. 常用typedef定义一些数据类型, 单独放在一个文件中,用#include命令把它们包含进来; 5. 使用typedef有利于程序的通用与移植。第16页,共18页。形如: typedef int NUMBER45; /* 定义NUMBER为整型二维数组 */ NUMBER num1,num2; /* num1,num2为整型二维数组 */ typedef float ARR100; /* 定义ARR为一维实型数组 */ ARR f1,f2; /* f1,f2为实型一维数组 */ typedef char CHARACTER20; /* 定义CHARACTER为字符数组 */ CHARACTER name1,name2; /* name1,vname2为字符数组 */第17页,共18页。typed

温馨提示

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

评论

0/150

提交评论