联合和枚举

简介: 联合和枚举

联合体

联合体类型的声明

1. 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。

2. 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间,所以联合体也叫:共⽤体。

3. 给联合体其中⼀个成员赋值,其他成员的值也跟着变化。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
union UN
{
  char a;
  int b;
};
int main()
{
  union UN u = {0};
  printf("%d\n", sizeof(u));//4
  return 0;
}

联合体的特点

1. 联合的成员是共⽤同⼀块内存空间的。

2. 这样⼀个联合变量的大小,至少是最⼤成员的大小。(因为联合体至少得有能⼒保存最⼤的那个成员)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
union UN
{
  char a;
  int b;
};
int main()
{
  union UN u = {0};
  printf("%p\n", &u);
  printf("%p\n", &(u.a));
  printf("%p\n", &(u.b));//三者地址相同
  return 0;
}

联合体大小的计算

1. 联合的大小⾄少是最⼤成员的大小。

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

#include <stdio.h>
union Un1
{
  char c[5];//5
  int i;//4
    //8
};
union Un2
{
  short c[7];//14
  int i;//4
    //16
};
int main()
{
  //下⾯输出的结果是什么?
  printf("%d\n", sizeof(union Un1));
  printf("%d\n", sizeof(union Un2));
  return 0;
}

枚举类型

枚举类型的声明

1. 枚举顾名思义就是⼀⼀列举, 把可能的取值⼀⼀列举。

2. { }中的内容是枚举类型的可能取值,也叫枚举常量 。

3. 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

enum Day//星期
{
  Mon,
  Tues,
  Wed,
  Thur,
  Fri,
  Sat,
  Sun
};
enum Sex//性别
{
  MALE,
  FEMALE,
  SECRET
};
enum Color//颜⾊
{
  RED,
  GREEN,
  BLUE
};
enum Color//颜⾊
{
 RED=2,
 GREEN=4,
 BLUE=8
};

枚举类型的优点

1. 增加代码的可读性和可维护性。


2. 和#define定义的标识符比较,枚举有类型检查,更加严谨。


3. 便于调试,预处理阶段会删除 #define 定义的符号。


4. 使⽤⽅便,⼀次可以定义多个常量。


5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤。

枚举类型的使用

enum Color//颜⾊
{
 RED=1,
 GREEN=2,
 BLUE=4
};
enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值

致谢

 感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

相关文章
|
7月前
|
缓存 前端开发 JavaScript
《解锁Spline:低代码3D设计的前端开发秘籍》
3D交互体验正成为网页应用的核心亮点,Spline作为一款低代码3D设计工具,为前端开发者提供了高效开发的解决方案。本文深入探讨了Spline的基础操作、资源管理、交互设计、与前端框架集成以及性能优化等关键技巧。通过合理控制模型复杂度、优化材质纹理、实现流畅交互,并结合React或Vue等框架,开发者可打造高性能、跨平台的沉浸式3D应用,提升用户体验。掌握这些技巧,能让Spline的潜力得到充分发挥,推动3D网页应用的创新与发展。
272 12
|
11月前
|
DataWorks 搜索推荐 大数据
聊聊DataWorks——这个一站式智能大数据开发治理平台
聊聊DataWorks——这个一站式智能大数据开发治理平台
704 2
|
Linux
VirtualBox的Centos上安装GNOME桌面完整教程
在VirtualBox上的CentOS系统安装GNOME桌面环境的完整教程,通过执行一系列命令来安装EPEL软件源、GNOME桌面环境,并配置系统默认运行级别为图形界面。
277 0
|
监控 安全 测试技术
什么是即时注入?攻击类型与防御
【8月更文挑战第12天】
381 4
|
机器学习/深度学习 存储 算法
算法时间复杂度分析
这篇文章讲解了如何分析算法的时间复杂度,包括关注循环执行次数最多的代码段、总复杂度的确定、嵌套代码复杂度的计算方法,并提供了大O阶的推导步骤和常见时间复杂度的列表,同时还介绍了空间复杂度的概念及其重要性。
|
开发框架 网络协议 Java
RPC调用和HTTP调用的区别你知道吗
RPC调用和HTTP调用的区别你知道吗
399 1
|
分布式计算 Hadoop
|
Java Sentinel Spring
spring boot 整合 sentinel
spring boot 整合 sentinel
609 1
|
存储 数据采集 搜索推荐
使用Java实现智能推荐系统的关键技术
使用Java实现智能推荐系统的关键技术