自定义类型:联合和枚举

🌈 个人主页:白子寰
🔥 分类专栏:魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分78.8+),分享更多关于深度学习、C/C++领域的优质内容!(希望得到您的关注~) 

目录

 联合体

联合体类型的声明

联合变量的大小 

联合体和结构体的对比

​编辑

联合体的作用

 枚举类型

 枚举类型优点


 联合体

联合体的特点所有成员共用同一块内存空间。所以联合体也叫共用体

联合体类型的声明

union Un
{
	int i;
	char ch;
};

int main()
{
	union Un p = { 0 };			//联合变量的定义
	printf("%zd\n", sizeof(p));	//计算联合变量的大小
	return 0;
}

注:联合体也类似结构体,结构体中的struct必不可少,同理,联合体中的union必不可少


联合变量的大小 

控制台输出:4

为什么呢?我们再来观察联合体中 i 和 ch 的地址

union Un
{
	int i;
	char ch;
};

int main()
{
	union Un p = { 0 };			//联合变量的定义
	printf("%zd\n", sizeof(p));	//计算联合变量的大小
	printf("%p\n", &p.i);
	printf("%p\n", &p.ch);
	return 0;
}

控制台输出:

代码结果解释

 那还有疑问,为什么这两个的地址要这样做存放呢?

这得谈及我们上面👆说到的联合体的特点;

这里我们具体再说一下联合体的特点

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


联合体和结构体的对比


联合体的作用

最大作用就是可以节省空间

举个栗子:

价格:price ;类型:type ;大小:size ;标签:label ;颜色:colour

我们可以这样子用联合体:

struct study_set
{
	//公共
	int price;
	char type;

	//特殊
	union
	{
		struct
		{
			char colour;  //颜色
		}pencil_book;     //笔盒

		struct
		{
			char label;    //标签
		}book;			   //书本

		struct
		{
			int size;      //大小
		}book_shelf;       //书架
	}item;
};

 枚举类型

枚举 -- 把可能的取值一一列举

一个星期有七天--1,2...7;

一年有12个月份--1,2...12


例如一周的天数

注:枚举也像结构体,联合体一样有关键字,枚举的关键字是enum

#include<stdio.h>
//一周的天数
enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};

int main()
{
	printf("%d\n", Mon);
	printf("%d\n", Tues);
	printf("%d\n", Wed);
	//...
	printf("\n");
	printf("%d\n", Sun);

	return 0;
}

来看看这段代码输出什么? 


以上是编译器设置的最初始默认值,也可以自己设置

#include<stdio.h>
//一周的天数
enum Day
{
	Mon=1,
	Tues=9,
	Wed=10,
	Thur,
	Fri,
	Sat,
	Sun
};

int main()
{
	printf("%d\n", Mon);
	printf("%d\n", Tues);
	printf("%d\n", Wed);
	//...
	printf("\n");
	printf("%d\n", Sun);

	return 0;
}

控制台输出:1 9 10  14 


 枚举类型优点

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

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

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

4. 使用方便,⼀次可以定义多个常量

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


 

 ***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“故事里摧坏的只有风景,谁也摧毁不了我们的梦境”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值