C语言——联合(共用体)~~详解

简介: C语言——联合(共用体)~~详解

一、联合的定义

联合也是一种特殊的自定义类型

这种类型定义也包含一系列的成员,特征是这些成员公用同一块空间

//联合类型的声明
union Un
{
  char c;
  int i;
};
int main()
{
  union Un un;//联合类型的定义
  printf("%d", sizeof(un));//计算联合类型变量的大小
  return 0;
}
运行结果: 4

二、联合的特点

联合的成员是公用一块内存空间的,那么一个联合变量的大小,至少是最大成员的大小。

那么,联合的成员的地址是一样的吗?

int main()
{
  union Un un;//联合类型的定义
  //printf("%d", sizeof(un));//计算联合类型变量的大小
  printf("%d\n", &(un.i));
  printf("%d\n", &(un.c));
  return 0;
}

运行结果:

再进一步验证:

un.i = 0x112233;
un.c = 0x66;
printf("%x\n", un.i);

运行结果:

这也更加验证了我们之前的结论,并且可以看出来是小端存储的。

三、联合大小的计算

联合大小计算的规则:

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

例如:

union Un1
{
  char c[5];//5 1VS8 1
  int i;// 4VS8 4
};
union Un2
{
  short c[7];//14 2VS8 2
  int i; //4VS8 4
};
int main()
{
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));
}

运行结果:

四、联合的应用

上面提到了大小端存储的问题,我们可以巧妙的利用联合来判断大小端存储。

我们可以利用1在大小端的存储方式进行判断。

union Un
{
  int i;
  char c;
};
int main()
{
  //利用联合判断大小端存储
  union Un u1;
  u1.i = 1;
  if (u1.c == 1)
  {
    printf("小端存储!");
  }
  else
  {
    printf("大端存储!");
  }
}

运行结果:


目录
相关文章
|
机器学习/深度学习 数据采集 自然语言处理
|
Python
Python 中的循环结构
Python 中的循环结构
296 3
|
机器学习/深度学习 编解码 自然语言处理
计算机视觉论文速递(八)ViTAE:COCO人体姿态估计新模型取得最高精度81.1AP
 人体姿态估计是计算机视觉领域的基本研究问题之一,具有很广泛的实际应用,例如医疗健康领域的行为分析、元宇宙领域的AIGC内容生成等。但是,由于人体姿态丰富,人物衣着表观变化多样,光照和遮挡等因素,人体姿态估计任务非常具有挑战性。之前的深度学习方法主要研究了新的骨干网络设计、多尺度特征融合、更强的解码器结构和损失函数设计等。
565 0
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
567 211
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
228 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
797 59