当前位置: 首页 > news >正文

【时时三省】(C语言基础)共用体类型

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

什么是共用体类型

有时想用同一段内存单元存放不同类型的变量。例如,把一个短整型变量、一个字符型变量和一个实型变量放在同一个地址开始的内存单元中。以上3个变量在内存中占的字节数不同,但短整型变量都从同一地址开始,也就是使用覆盖技术,后一个数据覆盖了前面的数据。这种使几个不同字符变的变量共享同一段内存的结构,称为“共用体”类型的结构。

定义共用体类型变量的一般形式为

union  共用体名

{ 成员表列

}变量表列;

例如:

union Data

{ int i;

char ch ;

float f ;

}a , b , c ;

也可以将类型声明与变量定义分开:

union Data

{ int i ;

char ch ;

float f ;

};

union Data a , b , c;

即先声明一个union Data类型,再将a,b,c定义为union Data类型的变量。当然也可以直接定义共用体变量,例如:

union   //没有定义共用体类型名

{ int i ;

char ch;

float f ;

}a , b ,c ;

可以看到,“共用体”与“结构体”的定义形式相似。但它们的含义是不同的。

结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度。例如,上面定义的“共用体”变量a,b,c各占4个字节(因为一个float型变量占4个字节),而不是各占4 +1 + 4 =9个字节。

国内有些C语言的书把union直译为“联合”。作者认为,译为“共用体”更能反映这种结构的特点,即几个变量共用一个内存区。而“联合”这一名词,在一般意义上容易被理解为“将两个或若干个变量联结在一起”,难以表达这种结构的特点。但是应当知道“共用体”在一些书中也被称为“联合”。如遇“联合”一词,应理解为“共用体”。

引用共用体变量的方式

只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只能引用共用体变量中的成员。例如,前面定义了a,b,c为共用体变量,下面的引用方式是正确的:

a.i(引用共用体变量中的整型变量i)

a.ch(引用共用体变量中的字符变量ch)

a.f(引用共用体变量中的实型变量f)

不能只引用共用体变量,例如下面的引用是错误的:

printf ( " % d”, a );

因为a的存储区可以按不同的类型存放数据,有不同的长度,仅写共用体变量名a,系统无法知道究竟应输出哪一个成员的值。应该写成

printf ( " % d”,a.i );

printf ( " % c”,a.ch );

http://www.dtcms.com/a/332907.html

相关文章:

  • 深度解析 DDoS 攻击:运作机制与防御体系构建​
  • 金融项目高可用分布式TCC-Transaction(开源框架)
  • 01数据结构-拓扑排序
  • Go语言实战案例:静态资源服务(CSS、JS、图片)
  • 迁移学习的常见研究领域(附有相关资料)
  • Kubernetes(2)pod的管理及优化
  • 数据结构初阶(17)排序算法——非比较排序、排序算法总结
  • LintCode第107题-单词拆分-新版
  • 国产操作系统之openEuler:根深叶茂
  • 力扣习题:基本计算器
  • 通过CANopen 配置闭环驱动器C5-E——易格斯igus
  • platform总线注册流程分析
  • CUDA 编程笔记:使用 CUDA 加速数组总和
  • 102、【OS】【Nuttx】【周边】文档构建渲染:安装 Esbonio 服务器
  • 【JavaEE】多线程 -- 死锁问题
  • linux服务器查看某个服务启动,运行的时间
  • 如何将 iPhone 应用程序传输到新 iPhone?
  • C++ rapidjson库使用示例
  • 【慕伏白】CTFHub 技能树学习笔记 -- Web 前置技能之HTTP协议
  • Vue 侦听器(watch 与 watchEffect)全解析3
  • 【ESP32】ESP32-P4 通过 SDIO 连接 ESP32-C6
  • FCC认证三星XR头显加速全球量产,微美全息AI+AR技术引领智能眼镜硬件创新
  • webgis-maps通用地图框架库(leaflet+mapbox)
  • 《探秘浏览器Web Bluetooth API设备发现流程》
  • K8S-Pod资源对象
  • 英语角的恢复重建!
  • 【入门级-算法-6、排序算法:排序的基本概念冒泡排序】
  • uniapp小程序ocr-navigator身份证拍照上传替换方案
  • Rust 入门 集合类型 (十六)
  • 103、【OS】【Nuttx】【周边】文档构建渲染:Sphinx 配置文件