C语言共用体 union
#include <stdio.h>
union U1
{
unsigned char c [3];unsigned
int i;
};
union U2
{
char c[15];
int i;
};
int main(void)
{
union U1 u1;
union U2 u2;
printf("%d\n",sizeof(u1));
printf("%d\n",sizeof(u2));
u1.i = 4294967295; //这是无符号整型能表示的最大值
printf("%u\n%u\n%u\n%u\n",u1.c[0],u1.c[1],u1.c[2],u1.c[3]);
printf("%u\n",u1.i);
return 0;
}
/*
定义联合体的格式是:
union 联合体类型名
{
联合体成员1;
联合体成员2;
联合体成员n;
}联合体变量;
联合体与结构体不同,结构体的长度是其成员所占字节大小的和,而联合体的长度是联合体成员中所占字节大小最宽的成员的长度,
在本例中,联合体U1包含一个含有三个成员的字符数组和一个整型量,
含有三个元素的字符数组占三个字节,整型量占四个字节,所以联合体U1就占四个字节;
但不完全是这样,刚说的只是其中一点,评判联合体所占字节大小还有很重要的一点
联合体U2中包含一个含有十五个元素的字符数组,这个成员占十五个字节,还包含一个整型量,占四个字节,这个联合体的长度是十六个字节;
字符数组是这个联合体中所占字节最宽的一个成员,但十五不完整,或者说,这个联合体中所有的基本类型量所占字节大小不能被十五整除,
联合体U2中包含一个字符型和一个整型,所占字节大小分别是1和4,十五不能完全整除这两个数,所以加宽到16。
联合体的意义有很多,它可以更直观的查看一块内存,随着对指针,内存的理解的加深,会慢慢体会到它的妙处,
本例中掩饰了它的基本用法,并通过程序说明了该联合体在内存中的布局,请务必把这些都搞明白,这里不做解释。
*/
知乎: @张赐荣
赐荣博客: www.prc.cx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!