看一个例子:

#include <iostream>
#include <stdio.h>
using namespace std;union A {int a;struct {short b;short c;};
};int main()
{A s;s.a = 0x12345678;printf("%x %x", s.b, s.c);return 0;
}

输出结果:

5678 1234

为什么是这样的呢?

因为A是union,所以在内存中存储的格式为:

高地址         ------------>    低地址

12     34    56    78

00010010 00110100   01010110   01111000

s.b 占据低地址的两个字节

s.c 占据高地址的两个字节

所以:

s.b = 5678

s.c = 1234

为了证明,以及看的更清楚,看下面这个程序。

#include <iostream>
#include <stdio.h>
using namespace std;union A {int a;struct {short b;short c;};
};int main()
{A s;s.a = 0x12345678;printf("b = %x ; c = %x\n", s.b, s.c);printf("&a = %x ; &b = %x; &c = %x\n", &s.a, &s.b, &s.c);return 0;
}

结果:

b = 5678 ; c = 1234
&a = 28ff1c ; &b = 28ff1c; &c = 28ff1e

是不是很明显了。

转载于:https://www.cnblogs.com/chenhuan001/p/7516345.html

c++ union内存相关推荐

  1. c语言union内存大小,C语言、C++中的union用法总结

    开始的话 已经好长时间没有更新了,对不起自己,更对不起我亲爱的读者,同时也对不起自己开办的这个博客平台.忙,太忙了,忙于找工作,找一份好工作,纠结于去大城市闯呢,还是回到本省的首府城市.大家都在纠结这 ...

  2. C++中的内存对齐介绍

    网上有很多介绍字节对齐或数据对齐或内存对齐的文章,虽然名字不一样,但是介绍的内容大致都是相同的.这里以内存对齐相称.注:以下内容主要来自网络. 内存对齐,通常也称为数据对齐,是计算机对数据类型合法地址 ...

  3. c语言20字节的内存的数据怎么读取_C++编程-内存对齐

    内存对齐可以大大提升内存访问速度,是一种用空间换时间的方法. 1.内存对齐的计算机原理 内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址).访问数据(表现为CPU读取数据)的一种方式,包含 ...

  4. 关于联合体union的详细解释

    1.概述 联合体union的定义方式与结构体一样,但是二者有根本区别. 在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和.而在"联合"中,各成员共享一段内存空间 ...

  5. C++ 中内存对齐原理及作用

    struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储 ...

  6. c语言union字节相同大小不同,C语言的struct/union字节对齐

    C语言的一大优势就是对内存空间的控制,当然,一般情况下对于开发人员来说都是透明的.看一个始终困扰初学者的问题:字节对齐! 先看四个重要的基本概念: 1.数据类型自身的对齐值: 对于char型数据,其自 ...

  7. union理解与妙用

    最近在看PCL中关于自定义PointT类型的文档,发现其中广泛使用了union,以前学习的时候用不到这个,也就没有留心,借此机会学习下union的使用方法,理解下union的本质. 一 struct和 ...

  8. Redis源码剖析和注释(十六)---- Redis输入输出的抽象(rio)

    Redis源码剖析和注释(十六)---- Redis输入输出的抽象(rio) . https://blog.csdn.net/men_wen/article/details/71131550 Redi ...

  9. 2021秋招嵌入式笔试面试题目汇总

    ​本系列按类别对题目进行分类整理,这样有利于大家对嵌入式的笔试面试考察框架有一个完整的理解. 欢迎关注公众号<嵌入式Linux系统开发>,定期分享硬件.单片机.嵌入式Linux技术文章,支 ...

最新文章

  1. 30条HTML代码编写指南 for入门者
  2. 机器学习开发者的现代化路径:不需要从统计学微积分开始
  3. Java+Javascript图片裁剪简单封装
  4. hk.module must be initialized inside an hk.transform
  5. AOP技术研究 再续
  6. Linux下软件安装和卸载
  7. 基于Linux和MiniGUI的嵌入式系统软件开发指南(二)
  8. 一文带你了解 JVM 的垃圾回收机制
  9. Java集合详解2:LinkedList和Queue
  10. 25. 二叉树中和为某一个值的路径(C++版本)
  11. 怎么给服务器部署php探针,phpStudy学习之php探针
  12. Redhat 7.2 安装网卡驱动
  13. 大秦帝国-《治秦九论》
  14. 2021年全国大学生计算机能力挑战赛(Java)决赛试题代码(外加部分试题)
  15. html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)...
  16. 微型计算机地址总线是16位,某微型计算机的地址总线的位数是16位,最大的寻址空间可为()。A.32KBB.64KBC.128KBD.256KB...
  17. Python 爬取留言板留言(二):多线程版+selenium模拟
  18. 私有和公开IP地址的区别是什么?
  19. H323、H248(MGCP)、SIP三协议浅析
  20. harbor安装时出现ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug in

热门文章

  1. mysql 修改表结构提示 MySQL said: Table is read only
  2. 解决php写入mysql乱码问题汇总
  3. linux 下查看帮助信息
  4. SpringBoot 缓存之 @Cacheable 详细介绍
  5. Golang精编100题
  6. 1.Ping 的实现协议及原理
  7. 【Scratch】青少年蓝桥杯_每日一题_6.17_奇偶数
  8. jQuery-事件委托(基本概述+实例)
  9. jsonutil java_Java实现的JSONUtil工具类与用法示例
  10. 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...