自定义类型(二):枚举和联合体(共用体)

   日期:2021-04-01     浏览:105    评论:0    
核心提示:文章目录一、枚举常量1.枚举常量的定义2.枚举常量的优点二、联合体(共用体)1.联合体类型的定义1.联合体中的变量2.联合体大小的计算感谢阅读,如有错误请批评指正传送门:[自定义类型(一):结构体](https://blog.csdn.net/weixin_51983604/article/details/115298310)一、枚举常量枚举常量顾名思义就是把可能的取值依次列举,且这些可能的取值具有常量的属性。比如:一周的星期一到星期日是有限的7天,可以依次列举。性别有男、女,也可以依次列举.

文章目录

  • 一、枚举常量
    • 1.枚举常量的定义
    • 2.枚举常量的优点
  • 二、联合体(共用体)
    • 1.联合体类型的定义
    • 1.联合体中的变量
    • 2.联合体大小的计算
  • 感谢阅读,如有错误请批评指正

一、枚举常量

枚举常量顾名思义就是把可能的取值依次列举,且这些可能的取值具有常量的属性。

比如:
一周的星期一到星期日是有限的7天,可以依次列举。
性别有男、女,也可以依次列举。
月份有12个月,也可以依次列举。

要记录这些可能的取值,数组当然可行,但C语言提供了一种更加方便的方式:枚举。

1.枚举常量的定义

代码如下(示例):

enum Weekday//星期
{ 
	Mon,//常量间用逗号分开
	Tue,
	Wed,
	Thu,
	Fri,
	Sat,
	Sun//注意最后一个常量后没有逗号
};

enum Sex
{ 
	Male,
	Female
}

这些枚举常量中的常量都有对应的值,默认第一个常量从0开始,依次递增1,当然在定义的时候也可以赋初值。

代码如下(示例):

enum Weekday1
{ 
	//不赋初始值,默认从0开始递增1
	Mon,//0
	Tue,//1
	Wed,//2
	Thu,//3
	Fri,//4
	Sat,//5
	Sun//6
};

enum Weekday2
{ 
	//给某个常量赋初始值,则从该常量开始递增1
	//该常量之前的不受影响
	Mon,//0
	Tue,//1
	Wed = 10,//10
	Thu,//11
	Fri,//12
	Sat,//13
	Sun//14
};

2.枚举常量的优点

我们可以使用 #define 定义常量,为什么非要使用枚举?
枚举的优点:
(1) 增加代码的可读性和可维护性
(2) 和#define定义的标识符比较枚举有类型检查,更加严谨
(3) 防止了命名污染(将常量封装起来)
(4) 便于调试
(5) 使用方便,一次可以定义多个常量

二、联合体(共用体)

1.联合体类型的定义

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

代码如下(示例):

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

1.联合体中的变量

由于联合体中的变量共用同一块空间,所以在改变其中一个值的时候会影响到其他的值。

代码如下(示例):

union Un
{ 
	int a;
	int b;
	int c;
};

int main()
{ 
	union Un un;
	
	//下面的三个地址均相同
	printf("%d\n", &(un.a));
	printf("%d\n", &(un.b));
	printf("%d\n", &(un.c));
	
	un.a = 1;
	printf("%d\n", un.b);//1
	printf("%d\n", un.c);//1

	un.b = 2;
	printf("%d\n", un.a);//2
	printf("%d\n", un.c);//2
	
	return 0;
}

2.联合体大小的计算

联合体的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

代码如下(示例):

union Un1 
{  
	char c[5]; 
	int i; 
}; 
union Un2 
{  
	short s[7]; 
	int i; 
}; 
printf("%d\n", sizeof(union Un1)); //8
//c数组占5个字节,对齐数为1;i变量占4个字节,对齐数为4
//联合体大小至少为5个字节,对齐到最大对齐数的整数倍,即为8
printf("%d\n", sizeof(union Un2));//16
//s数组占14个字节,对齐数为2;i变量占4个字节,对齐数为4
//联合体大小至少为14个字节,对齐到最大对齐数的整数倍,即为16

感谢阅读,如有错误请批评指正

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服