枚举、联合(共用体)详解

枚举类型的定义

  1. 枚举顾名思义就是------列举。
    举例说明
enum Color//颜色
{
    
    
    RED,
    GREEN,
    BLUE
};
  1. 这里的enum Color是枚举类型,RED、GREEN、BLUE,{ }里面的都是枚举常量。
  2. 这些枚举常量都是有值的,默认从零开始,依次递增,当然定义的时候也可以赋初值。这里举个例子,如果给RED赋初值为3,则GREEN、BLUE默认为4,5.

枚举的优点

为什么要使用枚举呢?
这里我们还可以使用#define定义宏常量,举例说明一下

#define RED  1
#define GREEN 2
enum Color//颜色
{
    
    
    RED,GREEN
    GREEN,
    BLUE
};

下面看一下枚举的优点:

  • 增加代码的可维护性和可读性
  • 和#define定义的标识符比较枚举有类型检查,更加严谨
  • 防止了命污染(封装)
  • 便于调试
  • 使用方便,一次可以定义多个常量

枚举的使用

这里的使用我们直接用看一下这段代码

enum Color
{
    
    
    RED=1,
    GREEN=2,
    BLUE=4
};
enum Color clr = GREEN;//这里拿枚举常量给枚举变量赋值,才不会出现类型的差异
//clr=5;//这里不能将“int”类型的值分配到“Color”类型的实体

联合类型的定义

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

//联合类型的声明
union Un
{
    
    
    char c;
    int i;
};
//联合变量的定义
union Un un;
//计算这个变量的大小
printf("%d\n",sizeof(un);

联合的特点

  • 联合的成员是公用一块内存空间,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
    下面看一下这个例子:
    在这里插入图片描述

在这里插入图片描述
在计算机中

  • 大端机 低位放高位,高位放低位
  • 小端机 低位放低位,高位放高位

联合大小的计算

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数整数倍的时候,就要对齐到最大对齐数的整数倍。
#include<stdio.h>
#pragma pack(4)
union Un1
{
    
    
	
	char c[5];
	int i;
};
union Un2
{
    
    

	short c[7];
	int i;
};
int main()
{
    
    
	printf("%d\n", sizeof(Un1));//输出结果为8
	printf("%d\n", sizeof(Un2));//输出结果为16
	return 0;

}

猜你喜欢

转载自blog.csdn.net/weixin_45796387/article/details/112913989