C语言中的枚举与联合(共用体)详细介绍

一.枚举

枚举的意思就是列举,将每一个可能的取值都进行一一列举。在我们的现实生活中,星期可以列举,颜色可以列举,月份也可以列举,其实存在很多可以列举的事物。当我们列举时,就可以用到枚举。

1.枚举类型的定义
枚举类型的定义如下列代码:

enum Day//星期 
{    
	Mon,    
	Tues,   
	Wed,    
	Thur,    
	Fri,    
	Sat,    
	Sun 
}; 
enum Color//颜色 
{    
	RED,
	GREEN, 
	BLUE,
};

以上我们所定义的 enum Dayenum Color都是枚举类型。 { }中的内容是枚举类型的可能取值,也叫做枚举常量。这些枚举常量在一开始是有默认取值的,默认值都从 0 开始升序,每次增加 1 ,当然我们在定义的时候也可以对这些枚举常量赋初值。例如:

enum Day
{    
	Mon = 1,  
	Tues = 2, 
	Wed = 3,    
	Thur = 4,    
	Fri = 5,
	Sat = 6,    
	Sun= 7 
};

切记,在枚举类型定义时,{}里面的常量后加的是逗号,而不是分号。由于习惯原因可能会出现这种错误,要特别注意。

2.枚举的优势
很多人都在想为什么我们可以用 #define 定义常量,那为什么还要用枚举。枚举常量和#define的区别:
(1).增加代码的可读性可维护性
(2) 和#define定义的标识符比较枚举有类型检查,更加严谨。(类型不同就不可以赋值)
(3) 防止了命名污染(封装) 。(为防止冲突,#define是全局的,枚举是局部的)
(4) 便于调试 。(#define不能调试)
(5) 使用方便,一次可以定义多个常量。

二.联合(共用体)

1.联合类型的定义

联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。比如:

union Un //联合类型的声明 
{  
	char c;  
	int i; 
}; 
union Un un;//联合变量的定义 

2.联合的特点

union Un 
{ 
	int i;  
	char c; 
}; 
union Un un;
//由于i和c是共用内存,所以他们的地址是一样的
un.i = 0x11223344; 
un.c = 0x55; 
//因为小端存储,所以i的值会变为0×11223355

3.联合大小的计算

在结构体介绍时说到过对齐数,那联合体也是要根据对齐数来计算大小:
1.联合的大小至少是最大成员的大小。
2.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
例如:

union Un1 
{ 
	char c[5];  
	int i; 
}; 

联合体Un1的大小为8,首先char c[5]的大小为5,每个成员大小为1,VS中默认对齐数为8,取最小值为1,所以它存储的地址为 0-4。int i大小为4,但由于他们共用内存,所以i存储地址为 0-3。由于最大默认对齐数为4,所以该联合体大小为8。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值