轻松拿捏C语言——自定义类型之【联合体与枚举】

2024-06-04 2985阅读

轻松拿捏C语言——自定义类型之【联合体与枚举】 第1张

轻松拿捏C语言——自定义类型之【联合体与枚举】 第2张

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊

🎉创作不易,请多多支持🎉

🌈感谢大家的阅读、点赞、收藏和关注💕

🌹如有问题,欢迎指正


 

目录👑

🌟一、联合体(共用体)

🌙1、声明

🌙2、特点

🌙3、大小计算

🌟二、枚举类型

🌙1、声明

🌙2、优点

🌙3、使用


🌟一、联合体(共用体)

🌙1、声明

联合体和结构体一样可以有多个成员,成员类型可以不同。

联合体所有成员共用一块空间,所以联合体又叫 共用体

一个联合变量的大小至少是最大成员的大小

在声明上,联合体和结构体类似,只是把struct关键字换成了union关键字。

给联合体一个成员赋值,其他成员的值也会跟着变化

#include 
//联合类型的声明
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	//计算连个变量的⼤⼩
	printf("%d\n", sizeof(un));
	return 0;
}

这里结果为4,因为这里int最大,占四个字节 

🌙2、特点

代码1

#include 
//联合类型的声明
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	// 下⾯输出的结果是⼀样的吗?
	printf("%p\n", &(un.i));
	printf("%p\n", &(un.c));
	printf("%p\n", &un);
	return 0;
}

运行结果

轻松拿捏C语言——自定义类型之【联合体与枚举】 第3张

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

代码2

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

运行结果 

轻松拿捏C语言——自定义类型之【联合体与枚举】 第4张

可以看到结果不是11223344,第四个字节内容44被换成了55

轻松拿捏C语言——自定义类型之【联合体与枚举】 第5张

🌙3、大小计算

联合的大小至少是最大成员的大小。

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

(这里最大对齐数和结构体中一样,

可以参考轻松拿捏C语言——自定义类型之【结构体】-CSDN博客)

举例:

#include 
union Un1
{
	char c[5];
	int i;
};
union Un2
{
	short c[7];
	int i;
};
int main()
{
	
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}

 轻松拿捏C语言——自定义类型之【联合体与枚举】 第6张

结果为8和16。

你对了吗?

在union Un1中成员有两个,char c[5]占5个字节大小,在vs中1


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]