枚举类型和联合体类型

简介: 枚举类型和联合体类型

一、 枚举类型

简单介绍一下

枚举 顾名思义 就是一一例举

像我们生活中的很多东西 比如说一周有多少天

性别有几种 这些都可以用枚举类型来一一列举


1. 枚举类型的定义

我们以性别为例子

这里如果我们开始打印它们的数值的话 我们会发现

typedef enum Sex
{
  MALE,
  FEMALE,
  SECRET
}Sex;

male的初始数值是0

后面的数值依次增加1

这里也从侧面证明了enum枚举类型枚举出来的是常量

当然我们对于enum的值也可以自己设置

例如


2. 枚举类型的优点

我们为什么要使用枚举类型?

增加代码的可读性和可维护性

就拿我们前面写的一篇博客 通讯录 来说


case 1 2 3 这些可读性并不高 我怎么会知道1 2 3这些是什么意思呢?

这个时候我们就可以使用我们的枚举类型来定义

例如

enum select
{
  exit,
  add,
  del,
  search,
  rev,
  show,
};

使用这样的枚举类型就可以很好的替代

使用方便

这个就不用过多解释了 因为它可以一次定义多个常量

3. 枚举的使用

看代码

int main()
{
  enum Color//颜色
  {
    RED = 1,
    GREEN = 2,
    BLUE = 4
  };
  enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
  return 0;
}

二. 联合体(共用体)

1. 联合体的定义

联合体是一种特殊的自定义类型

这种类型定义的变量包含一系列的成员 特征是这些成员公用一块空间

例如

union UN
{
  char c;
  int i;
};

我们来看看 这个联合体的大小是多少.


是4

这是为什么呢?

因为一个int类型的大小就已经是4了啊

那么char类型的数据放在哪里呢?

我们来看定义

联合的大小至少是最大成员的大小。

当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

这时候char类型的最大对齐数是1

b类型的最大对齐数是4

所以说它的大小是4

2. 联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大(因为联合至少得有能力保存最大的那个成员)。

不知道同学们还记不记得我们前面设计了一个算法来计算计算机的大小端存储

其实这个判断方法我们利用union来判断也可以

//判断当前计算机的大小端存储
int main()
{
  int a = 1;
  //0x 00 00 00 01;
  //01 00 00 00 ---小端存储
  //00 00 00 01 ---大端存储
  if (*(char*)&a == 1)
  {
    printf("小端存储\n");
  }else
    printf("大端存储\n");
 
  return 0;
}

用联合体

int check_sys(int i)
{
  union
  {
    char a;
    int i;
  }un;
  un.i = 1;
  return un.a;
}
int main()
{
  int a = 1;
  int ret = check_sys(a);
  if (ret == 1)
  {
    printf("小端\n");
  }else
    printf("大端\n");
 
  return 0;
}

实现结果如下


这样我们就知道了我们现在使用的机器是使用的小端法啦

3. 联合体的计算

首先上定义

联合的大小至少是最大成员的大小。

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

看代码:

union UN
{
  char c[5];
  int n;
};
 
union UN2
{
  short a[7];// 2 8   14    2
  int i;//4 8               4 
};
int main()
{
  union UN un;
  printf("%d\n", sizeof(un));
  printf("%d\n", sizeof(union UN2));
  return 0;
}

运行结果如下:

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言

目录
相关文章
|
1月前
|
存储 C语言
什么是共用体类型
什么是共用体类型
25 0
|
1月前
|
存储 C语言
自定义类型:联合体和枚举
联合体类型,联合体的大小计算,联合体的实际应用,练习:判断大小端,枚举类型,枚举类型的声明:枚举类型的优点,枚举类型的实际案例:
|
27天前
|
存储 编译器 Linux
自定义类型——结构体、联合体、枚举
自定义类型——结构体、联合体、枚举
20 1
|
1月前
|
存储 安全 编译器
共用体类型
共用体类型
21 1
|
1月前
|
编译器
联合体和枚举
联合体和枚举
20 0
|
1月前
|
编译器 测试技术 C语言
详解自定义类型:枚举与联合体!
详解自定义类型:枚举与联合体!
|
10月前
|
C语言
C语言知识点:结构体,枚举,联合体
C语言知识点:结构体,枚举,联合体
54 0
|
1月前
|
存储 开发框架 .NET
自定义类型:联合体和枚举类型(联合体与结构体的区别)
自定义类型:联合体和枚举类型(联合体与结构体的区别)
|
8月前
|
存储 编译器 C语言
C/C++之自定义类型(结构体,位段,联合体,枚举)详解
C/C++之自定义类型(结构体,位段,联合体,枚举)详解
56 0
|
11月前
|
存储 编译器 Linux
自定义类型:结构体、枚举、联合体
自定义类型:结构体、枚举、联合体