枚举类型和联合体类型

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

一. 枚举类型


简单介绍一下


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


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


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


1. 枚举类型的定义


我们以性别为例子


enum Sex
{
  male,
  female,
  secret
};


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


male的初始数值是0


后面的数值依次增加f3e9063b0c6244a287e27f941f65c512.png

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


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


例如


5f9aabf28a7d46998a2fe5f1a21b0154.png


2. 枚举类型的优点


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


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


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


a17ec17c7f834910803cc276b5f98012.png


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 a;//1个字节
  int b;// 4个字节
};


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


8237f710d5f147928124d9d599fd6459.png


是4

这是为什么呢?

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

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


我们来看定义


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

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


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


b类型的最大对齐数是4


所以说它的大小是4


2. 联合体的特点


联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联

合至少得有能力保存最大的那个成员)。


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


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

606816654b1b4f459796177a7ef0c437.png


设计代码如下


int main()
{
  union un
  {
    char a;
    int b;
  }un1;
  un1.b = 1;
  if (un1.a==1)
  {
    printf("小端法\n");
  }
  else
  {
    printf("大端法\n");
  }
}


实现结果如下

59c4ed34ee2c48e696ae37744f04eac4.png


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


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


3. 联合体的计算


首先上定义


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

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


两道题


int main()
{
  union Un1
  {
    char c[5]; // 5   1
    int i;// 4     4 大小是8(5不是4的倍数)
  };
  union Un2
  {
    short c[7];// 14  2
    int i;// 4    4  大小是16 (14不是4的倍数)
  };
  //下面输出的结果是什么?
  printf("%d\n", sizeof(union Un1));
  printf("%d\n", sizeof(union Un2));
  return 0;
}


运行结果如下


11146809e24f4922a90716e4f705251a.png


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
6月前
|
存储 C语言
什么是共用体类型
什么是共用体类型
50 0
|
6月前
|
存储 C语言
自定义类型:联合体和枚举
联合体类型,联合体的大小计算,联合体的实际应用,练习:判断大小端,枚举类型,枚举类型的声明:枚举类型的优点,枚举类型的实际案例:
|
29天前
|
存储 编译器 C语言
自定义类型(二)结构体位段,联合体,枚举
本文介绍了C++中结构体的默认对齐数修改,位段的声明和使用,联合体的概念及其实际应用,以及枚举类型的用途。通过实例展示了如何优化内存使用和提高代码可读性。
16 1
|
6月前
|
存储 编译器 Linux
自定义类型——结构体、联合体、枚举
自定义类型——结构体、联合体、枚举
|
6月前
|
存储 安全 编译器
共用体类型
共用体类型
42 1
|
5月前
|
存储 算法
枚举类型和联合体类型
枚举类型和联合体类型
24 0
|
6月前
|
编译器
联合体和枚举
联合体和枚举
31 0
|
6月前
|
编译器 测试技术 C语言
详解自定义类型:枚举与联合体!
详解自定义类型:枚举与联合体!
|
C语言
C语言知识点:结构体,枚举,联合体
C语言知识点:结构体,枚举,联合体
70 0
|
6月前
|
存储 开发框架 .NET
自定义类型:联合体和枚举类型(联合体与结构体的区别)
自定义类型:联合体和枚举类型(联合体与结构体的区别)