联合和枚举

联合体

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

联合体又名共用体,顾名思义他的成员公用一块空间。这也是他的一大特点。

关键字:union 

联合体的声明

union+名字{

成员变量;

};

创建一个联合体和使用:

union U{
  char i;
  int a;
};
int main()
{
   union U s;
   s.a=0x11223344;//以十六进制存进去
   s.i=0x55;
   return 0;
}

它的声明和创建和结构体是一样的,他们也都属于自定义类型。

联合体的内存计算:

我们创建一个联合体,并打印他们成员里面的地址就可以知道他们的是公用一块空间的。 

union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%p\n", &un.i);
	printf("%p", &un.c);
	//printf("%x\n", un.i);
	return 0;
}

联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合 ⾄少得有能⼒保存最⼤的那个成员)。如上面这个联合,我们可以来求一下他的大小:

 

算出来是4个字节:

就证明了他的特点。

我们来画图,可以更加直观:

由图我们可以知道,当我们改变其中一个变量的值时就可能会改变其中成员的值;

求大小端(用联合体)

要我们写一个程序来判断大小端:

int check_sys()
{
 union
 {
 int i;
 char c;
 }un;
 un.i = 1;
 return un.c;//返回1是⼩端,返回0是⼤端
}

这就是利用它里面的成员共用一块空间的特点;我们返回un.i是就返回整数的一个字节的内容;如果是小端存储的话,那么我们取出来一个字节的内容的话就是1;大端的话就是0; 

枚举

枚举顾名思义就是就是一一列举,就是把可能的情况一一列举出来。

就比如:一周有多少天,基本的三种颜色:红黄蓝;

等等,就是这个情况你可以一一列举出来,如果你想要枚举来写题目的话就一定要将所有情况列举出来,不能少也不能重复,所以要求比较高。

声明:

关键字:enum

enum 名字{

枚举类型,

};

enum Day//星期
{
 Mon,
 Tues,
 Wed,
 Thur,
 Fri,
 Sat,
 Sun
};
枚举类型的可能取值,也叫 枚举常量
这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值

 

 

从这里我们可以可以证明这个。

其实他和#define x 1;一样,我们直接将这个x替换成一。

这里我们的的s=Mon,也是将Mon替换成0;

当然我们也可以将枚举类型进行初始化:

enum Day//星期
{
 Mon=2,
 Tues=4,
 Wed=5,
 Thur=6,
 Fri,
 Sat,
 Sun=3
};

 如果这时我们将s=Fri,打印出来的值是7,因为你没有给他初始化,它就会在从我们初始化的的地方加,加到它自己这里来,这里的Sat就是8,但是Sun你对他初始化了就是3;

我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?

枚举的优点:

1. 增加代码的可读性和可维护性
2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号
4. 使⽤⽅便,⼀次可以定义多个常量
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐ 较严格。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 23:42:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 23:42:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 23:42:05       82 阅读
  4. Python语言-面向对象

    2024-03-24 23:42:05       91 阅读

热门阅读

  1. 100个shell常用命令

    2024-03-24 23:42:05       44 阅读
  2. 突破编程_C++_面试(STL 编程 stack)

    2024-03-24 23:42:05       42 阅读
  3. Mybatis

    Mybatis

    2024-03-24 23:42:05      32 阅读
  4. docker部署服务无法自动注册xxl-job问题排查和解决

    2024-03-24 23:42:05       39 阅读
  5. 关于vue 工具与插件

    2024-03-24 23:42:05       38 阅读
  6. Flume详解

    2024-03-24 23:42:05       39 阅读
  7. P2123皇后游戏

    2024-03-24 23:42:05       42 阅读
  8. Linux简单基础配置

    2024-03-24 23:42:05       41 阅读
  9. (c/c++)——线程的基础使用

    2024-03-24 23:42:05       37 阅读