9.5--9.6 共用体类型和枚举类型

9.5  共用体类型

9.5.1  什么是共用体类型

有时想用同一个内存单元存放不同的类型的变量。例如,把一个int变量 ,char变量和float变量放在同一个地址开始的内存单元中。

定义共用体类型变量的一般形式为:

union 共用体名

{

成员表列

}变量表列;

union Data {   //表示不同的类型a,b,c存放在同一段存储单元中
	int a;
	char b;
	float c;
}m,n;    //在声明类型时同时定义变量
union Data {
	int a;
	char b;
	float c;
};       //先声明定义共用体类型 
union Data m, n;    //声明定义共用体变量m,n;

结构体变量所占的字节是各个成员占的内长长度之和。每个成员都有自己的内存单元。

而共用体变量所占的内存长度等于最长的成员的长度。例如,上面定义的共用体变量a,b,c各占4个字节(因为一个float型变量占4个字节)。

9.5.2  引用共用体变量的方式

只用定义了共用体变量才能引用它,但应该注意,不能引用共用体变量,而只能引用共用体变量中的成员。例如,前面定义了m,n为共用体变量,下面引用方式是正确的:

m.a 
m.b 
m.c
n.a
n.b
n.c

9.5.3  共用体类型数据的特点

  1. 同一个内存段可以用来存放几种不同类型的成员,但在每一个瞬时只能能存放其中一个成员,而不是同时存放几个。

  2. 可以对公用体变量初始化,但初始化表中只能有一个常量。

    union Date{
    int i;
    char ch;
    float fl;
    }a = {1,'s',23.3};
    //这种情况用法不对,错误
    union Data a = {16} //正确 ,对第一个成员初始化
    union Data a = {.char ='c'};正确,对指定的成员初始化。

     

 

 

    3.共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有的存储单元中的值被取代。如果执行下面的语句

a.ch = 'c';
a.f = 1.5;
a.i = 123;

在完成以上3个赋值运算以后,变量存储单元存放的是最后存入的123;原来的'c'和1.5都被覆盖了

.  4.共用体变量地址和它的各个成员地址都是同一个地址。

   5.不能对共用体变量名赋值,也不能企图引用共用体变量来得到一个值。

   6.共用体变量名不能作为函数参数,但可以使用指向共用体变量的指针作为函数参数。

   7.共用体类型可以出现结构体类型定义中,数组也可以作为共用体的成员。

9.6  使用枚举类型

如果一个变量只有几种可能的值,则可以定义为枚举类型,所谓枚举就是把可能的值一 一列举出来,变量的值只限于列举出来的值的范围内。

声明枚举类型用enum开头。例如

enum Weekday{sun,mon,tue,wed,thu,fri,sat};

上面声明了一个枚举类型enum Weekday。然后可以用该枚举类型来定义变量。例如:

enum Weekday  workday, weekend;

workday 和weekend被定义为枚举类型,花括号中的sun,mon,...,sat称为枚举元素枚举常量。

声明枚举类型的一般形式:

enum [枚举名]{枚举元素列表};

说明:

  1. 枚举元素按常量处理,故称枚举常量。不是因为它们是标志符而把它们看作变量,不能对他们赋值.
  2. 每一个枚举元素都代表一个整数,C语言编译器按定义顺序默认它们的值为0,1,2,3,4,5....。在上面定义中,sum自动为0,mon为1,。。。,sat的值为6。如果自定枚举常量sum的值为7.mon为1,以后顺序加1,sat为6。
  3. 枚举元素可以用来作判断比较。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值