小工具知识网

当前位置: 首页 > 行业知识 > 轻松拿捏C语言——自定义类型之【联合体与枚举】

行业知识

轻松拿捏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

上一篇:数据怎么放在服务器中去?

下一篇:怎么只送特殊服务器?