博客
关于我
C语言共用体union
阅读量:678 次
发布时间:2019-03-17

本文共 570 字,大约阅读时间需要 1 分钟。

10.共用体union

10.1 共用体类型的定义、变量定义和使用

(1) 共用体 (union) 和结构体 (struct) 在类型定义、变量定义上非常相似。

(2) 根本区别是:结构体类似一个"包裹",其中各个成员占据内存的不同单元,只是被打包在一起称为结构体;而共用体中的成员则占据同一内存单元,存在着一种多义性,更像是一块可以被不同方式解读的"硬盘"。

(3) 共用体的本质是对同一内存空间的二进制数据进行不同的解读方式。

(4) "联合体"这个名字不太好,现在用"共用体"更准确。

(5) 用 sizeof 计算共用体的大小,其实取的是占用内存最大的成员的大小,这样才能保证存下的空间足够容纳所有成员。

(6) 共用体内存对齐问题不存在,因为它本质上就是一个内存单元,不管你如何访问,都从同一个地址开始。

10.2 共用体和结构体的相同与不同

(1) 操作语法上基本相同,包括定义类型、声明变量、访问成员都非常相似。

(2) 本质区别在于:结构体是多个独立内存单元的集合,每个成员都有自己独特的地址空间,而共用体只是对一个内存单元的多重解读方式。

10.3 共用体的主要用途

(1) 用在面对同一内存块需要不同的解读方式时。

(2) 在C语言中,虽然可以通过指针或强制类型转换实现类似的功能,但共用体更简单直观,更便于理解和使用。

转载地址:http://myvhz.baihongyu.com/

你可能感兴趣的文章
IDEA springMVC不报错出现访问404问题
查看>>
springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作
查看>>
Redis概述和基础
查看>>
《可伸缩服务架构:框架与中间件》- 免费直接下载
查看>>
SSH整合的404错误
查看>>
wpf 使用Font Awesome
查看>>
阿里云Windows服务器+PHPStudy+apache 如何部署SSL证书
查看>>
宝塔如何配置一个IP多个端口访问不同项目
查看>>
c++11:std::declval、decltype
查看>>
Windows10:远程桌面连接报错“出现身份验证错误。要求的函数不受支持”
查看>>
Golang: ,ok模式
查看>>
C++ 错误:“xxx” does not name a type
查看>>
找不到自己Win10的Linux子系统的根目录?在这里哟!
查看>>
redis的发布和订阅
查看>>
lettcode 221. 最大正方形
查看>>
112. 路径总和(Javascript)
查看>>
G1 如何做到可预测的停顿和G1 垃圾收集器入门
查看>>
Tomcat启动报404(eclipse)
查看>>
0X3协议与数据包
查看>>
flutter 错误The method '/' was called on null.
查看>>