轻松拿捏C语言——自定义类型之【联合体与枚举】
🥰欢迎关注 轻松拿捏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; }
运行结果
可以看到这三个地址是一模一样的
代码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; }
运行结果
可以看到结果不是11223344,第四个字节内容44被换成了55
🌙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; }
结果为8和16。
你对了吗?
在union Un1中成员有两个,char c[5]占5个字节大小,在vs中1
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!