共用体、枚举和

共用体、枚举和

ID:65669134

大小:137.00 KB

页数:27页

时间:2022-01-09

共用体、枚举和_第1页
共用体、枚举和_第2页
共用体、枚举和_第3页
共用体、枚举和_第4页
共用体、枚举和_第5页
共用体、枚举和_第6页
共用体、枚举和_第7页
共用体、枚举和_第8页
共用体、枚举和_第9页
共用体、枚举和_第10页
资源描述:

《共用体、枚举和》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第19章共用体、枚举和位域通过本章的学习,需要掌握以下几点:共用体变量的定义和使用;枚举变量的定义和使用;位域变量的定义和使用。19.1共用体共用体(union)是C语言中另一种高级数据结构,它可以使几个不同成员共享同一块内存。合理地使用共用体可以节省内存空间的使用,还可以简化多种复杂数据的处理。本节将讨论共用体类型的概念及其字节长度,以及讨论共用体变量的的使用。19.1.1共用体类型在程序中,有时为了节约内存空间,可以使用共用体来使多个变量共享一块内存。共用体与结构体类似,可以含有多个成员,其声明形式如下:union共用体名{数据类型名成员名1;数据类型名成员名2;数据类型名成员名

2、3;…};19.1.2共用体变量共有体变量的定义方法与结构体变量类似。可以先声明一个共用体类型,再使用该共用体类型来定义共用体变量;也可以直接定义共用体变量;还可以使用typedef来定义一个共用体类型别名,再使用共有体别名来定义共有体变量。仅以第三种形式为例,如下所示。typedefunion_data_u_t{inta;charb;longlongc;}data_u_t;data_u_tv;19.1.2共用体变量使用共用体变量需要注意以下几点。由于共用体实际上只有一个有效成员,因此无法像初始化结构体那样使用多个值的序列对共用体进行初始化,只能使用含一个值的序列对其初始化,如下所示

3、。01data_u_tv={1,‘c’,23LL};/*错误:不可以使用多个值的序列初始化共用体*/02data_u_tv={1};/*正确:只能使用一个值的序列初始化共用体*/19.1.2共用体变量不可以直接为共用体变量赋值,需要通过赋值其成员来改变共用体的内存空间。在共用体中,对成员的访问和赋值都与结构体变量类似。例如:01v=2;/*错误用法*/02v.a=2;/*对a成员赋值*/03v.b=‘c’;/*对b成员赋值,a成员的值已改变*/04v.c=23LL;/*对c成员赋值,a和b的值都已改变*/19.1.2共用体变量虽然不能为共用体变量赋值,但可以使用共用体变量来获得共用体

4、的值。例如,下列代码中第2行和第3行的输出结果是一样的:01v.a=2;02printf(“%d”,v.a);03printf(“%d”,v);由于所有成员共享同一空间,因此所有成员的地址相同。19.1.2共用体变量共用体可以作为数组元素,可以作为结构体成员,也可以作为共用体的成员。注意赋值的成员和访问的成员的一致性。例如:01v.a=2;02printf(“%d”,v.a);/*对a成员赋值,所以访问a成员是可行的*/03printf(“%d”,v.b);/*此时访问b是危险的,得到的是不可知值*/由于共用体中的所有成员共享一块空间,因此对任意成员的赋值都会影响其他成员的值

5、。19.2枚举枚举类型是C语言中另一种高级类型。在前面已经学习了可以使用const常量和具名常量来代替程序中的出现的常量数值,枚举类型也可以用来定义常量数值。本节将先讨论枚举类型的概念和枚举类型的定义,再讨论枚举类型的使用场景。19.2.1定义枚举类型在程序中,常常会处理一组相关的属性。例如,为了区别不同的颜色属性,一般会为不同的颜色分配一个常量值,如果用const常量可以作如下处理。constYELLOW=1;constRED=2;constBLUE=3;constBLACK=4;19.2.1定义枚举类型可以以如下方式来使用这些const变量。car_colour=YELLOW;b

6、ike_colour=BLUE;这是一种可行的方法,但是存在最大的缺点是,在使用时无法显式地说明这些不同常量之间存在的关系,同时还无法自动限制这些const常量的值。19.2.1定义枚举类型C语言使用枚举类型为这种情况下的常量替代提供了更好的解决方案。它可以在定义常量的同时,将这些常量结合在一个集合中加强彼此的关系。枚举类型的声明与结构体和共用体的声明略有不同,其形式如下:enum枚举类型名{枚举成员1;枚举成员2;枚举成员3;…}19.2.2枚举类型的使用使用枚举类型需要注意以下几点。1.枚举成员值依次增加1定义枚举类型时,可以对枚举成员显式赋值,其后的枚举成员同样在该值的基础上加

7、1,如下所示。enummonth_t{APR=4,MAY,JUN,NOV=11,DEC,JAN=1,FEB,MAR};19.2.2枚举类型的使用2.不要使用枚举成员之外的值初始化枚举变量虽然枚举类型都被处理为int型,但不可直接使用int型将枚举变量赋值。例如:enummonth_tm=2;/*错误,类型不匹配*/编译器将警告该赋值表达式的类型不匹配。可以使用类型转换如下:enummonth_tm=(enummonth_t)2;/*正确*/虽然以上的做法是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。