当前位置:首页 > 编程笔记 > 正文
已解决

c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))

来自网友在路上 149849提问 提问时间:2023-10-24 19:22:24阅读次数: 49

最佳答案 问答题库498位专家为你答疑解惑

上篇文章介绍了结构体相关的内容,大家可以点击链接进行浏览:c语言进阶部分详解(详细解析自定义类型——结构体,内存对齐,位段)-CSDN博客

各种源码大家可以去我的gitee主页进行查找:唔姆 (Nerowlp) - Gitee.com

今天要介绍的是:枚举与联合的相关内容


目录

一.枚举

1.枚举类型的定义 

 2.枚举的优点

3.枚举的使用

二.联合(共用体) 

1.联合类型的定义 

2.联合的特点

应用:判断当前计算机的大小端存储 

3.联合大小的计算


一.枚举

  • 枚举顾名思义就是一一列举
  • 把可能的取值一一列举

1.枚举类型的定义 

enum Sex//性别
{MALE,FEMALE,SECRET
};
enum Color//颜色
{RED,GREEN,BLUE
};
上述代码定义的 enum Sex enum Color 都是枚举类型。
{  } 中的内容是枚举类型的可能取值,也叫 枚举常量  
  • 这些可能取值都是有值的,默认从 0 开始,一次递增 1 ,当然在定义的时候也可以赋初值
enum Sex
{MALE,FEMALE,SECRET
};int main()
{printf("%d\n", MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);return 0;
}

默认值便是从零开始: 

 

也可以自己进行主动赋值:

 

大家也可以猜一下这段代码输出什么:

enum Sex
{MALE,FEMALE=8,SECRET
};int main()
{printf("%d\n", MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);return 0;
}

答案揭晓:

 

 

 2.枚举的优点

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

 

3.枚举的使用

enum Color//颜色
{RED=3,GREEN=2,BLUE=4
};
enum Color cl = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异

二.联合(共用体) 

1.联合类型的定义 

联合也是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)
union A //定义一个共用体
{char a;int b;
};int main()
{union A a; //创建一个共用体变量printf("%p\n", &a);printf("%p\n", &(a.a));printf("%p\n", &(a.b));return 0;
}

可以看到三个地址是一样的: 

 

 

2.联合的特点

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

应用:判断当前计算机的大小端存储 

union A //定义一个共用体
{char a;int b;
};
int judge()
{union A u;u.b = 1;return u.a;
}int main()
{int a = judge();if (a == 1){printf("是小端");}else{printf("是大端");}return 0;
}

众所周知vs2019 是小端储存: 

 

 

 

3.联合大小的计算

  • 联合的大小至少是最大成员的大小
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
union U1
{char arr[5]; //5个字节  对齐数是1int a;  //4个字节   对齐数是4
};
int main()
{printf("%d", sizeof(union U1));//如果只是最大的成员变量的大小,那应当输出5return 0;
}

但结果是


 好啦,这次枚举,联合(共用体)就讲解到这里。下一次会继续记录我学习的过程。希望能对大家有所帮助。

 

 

 

 

 

 

 

 

 

 

 

 

 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))":http://eshow365.cn/6-23560-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!