联合和枚举

简介: 联合和枚举

联合体

联合体类型的声明

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;//使⽤枚举常量给枚举变量赋值

致谢

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

相关文章
|
弹性计算 JavaScript 前端开发
常见类型-1:空,联合,枚举
本实验将介绍TypeScript中空,联合,枚举类型的用法。
|
1月前
|
编译器
自定义类型:联合和枚举
自定义类型:联合和枚举
20 0
|
5月前
联合\联合类型使用实例
联合\联合类型使用实例
56 2
|
6月前
|
编译器 C语言 C++
结构体,枚举,联合大小的计算规则
结构体,枚举,联合大小的计算规则
43 7
|
6月前
|
存储 编译器 Linux
自定义数据类型:结构体+枚举+联合
自定义数据类型:结构体+枚举+联合
|
6月前
|
存储
介绍位段,枚举和联合
介绍位段,枚举和联合
38 2
|
存储 编译器 C语言
自定义数据类型:结构体,枚举,联合
自定义数据类型:结构体,枚举,联合
结构体、枚举、联合详解(下)
结构体、枚举、联合详解(下)
38 0
|
编译器 C语言 C++
结构体、枚举、联合详解(上)
结构体、枚举、联合详解(上)
32 0
|
存储 C语言 C++
位段、枚举、联合
位段的声明与结构体类似,有两个不同: 位段的成员必须是int、signed int、unsigned int或char(属于整形家族) 位段的每个成员后边有一个冒号和一个数字(这个数字大小不能超过前面数据类型的大小)
131 0
位段、枚举、联合