行业知识
轻松拿捏C语言——自定义类型之【联合体与枚举】
2026-10-31 20:28:14
来源:互联网转载
欢迎关注 轻松拿捏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
上一篇:数据怎么放在服务器中去?
下一篇:怎么只送特殊服务器?