博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Union的一个知识点
阅读量:4223 次
发布时间:2019-05-26

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

union是大家比较熟悉的一个数据类型,假设有:

union Ut

{

short  sh;

char  ch;

};

假设有如下执行代码

void main()

{

Ut  t;                // 1

t.sh = 0x1000; // 2

t.ch = 0x01;     // 3

}

如果是小端机器上,那么 代码执行完代码 2 处,t 对象的 变量的内存为:00 10,图示1如下

执行完代码 3 处后, t 对象的内存为图2所示:

t.ch = 0x01 ,就是红色的 01, 仅覆盖了原有的 00

内存却不是:01 00,(t.ch只能够操作一个字节的空间)

总结:一直以为,union的确是按最大的成员变量来开辟内存空间,但是只存放一个成员的值,以该程序为例,执行 t.sh = 0x1000;内存如图1所示。

但是执行 t.ch = 0x01后,以前的理解是会将内存先清空,再保存 t.ch的值,该是 01 00,但实际却是图2所示的 01 10 ,执行完代码3处,t.ch只是改变自己的一个字节,内存中的其他位置不作处理,只是保存自己的一个字节 01,后面的 10未操作。

你可能感兴趣的文章
Linux下c语言多线程编程
查看>>
Docker拉取镜像失败报错Error response from daemon: Get https://registry-1.docker.io解决办法
查看>>
IO操作的工具类总结
查看>>
Java中如何遍历Map对象的4种方法
查看>>
图片延时加载例子详解
查看>>
js获取url参数值的两种方式详解
查看>>
MyEclipse设置默认注释的格式
查看>>
同一服务器部署多个tomcat时的端口号修改详情
查看>>
常用正则表达式集锦
查看>>
Spring定时器的时间表达式
查看>>
主键和唯一索引的区别
查看>>
linux下使用yum安装gcc详解
查看>>
aclocal安装依赖的库
查看>>
ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)解决方案
查看>>
Host 'XXX' is not allowed to connect to this MySQL server解决方案
查看>>
corosync pacemaker 配置高可用集群(一)
查看>>
nginx(一) nginx详解
查看>>
nginx(二) nginx编译安装 及 配置WEB服务
查看>>
nginx(三) nginx配置:反向代理 负载均衡 后端健康检查 缓存
查看>>
jQuery核心--多库共存
查看>>