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

Union(联合体、共用体)

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

经典示例:

#include <stdio.h>
union un
{int i;char c[2];
};
int main()
{union un x;x.c[0]=10;x.c[1]=1;printf("\n%d",x.i);return 0;} 

在这个程序中,我们定义了一个联合(union)un,它包含一个整数i和一个字符数组c,这个字符数组有两个元素。
在main函数中,我们创建了一个un类型的变量x,并将x.c[0]赋值为10,x.c[1]赋值为1。然后我们打印x.i的值。
在这里,我们需要知道的是,联合中的所有成员共享同一块内存。也就是说,x.i和x.c共享同一块内存。
现在我们来看为什么输出结果是266。在这个程序中,我们假设使用的是小端存储方式。在小端存储中,对于一个多字节的数据,它的低位字节存储在低地址处,高位字节存储在高地址处。
因此,当我们将x.c[0]赋值为10(二进制表示为00001010),x.c[1]赋值为1(二进制表示为00000001)时,这两个字节被存储在内存中的顺序是0000000100001010。
这个二进制数转换成十进制是266。因此,当我们打印x.i的值时,输出结果为266。

http://www.lryc.cn/news/235675.html

相关文章:

  • C++11的互斥包装器
  • HR应用在线人才测评,给企业招聘带来的好处
  • 深入了解百度爬虫工作原理
  • 【C语言基础】分享近期学习到的volatile关键字、__NOP__()函数以及# #if 1 #endif
  • docker容器自启动
  • 【C++】:模板的使用
  • Springboot框架中使用 Redis + Lua 脚本进行限流功能
  • 【nlp】2.5(cpu version) 人名分类器实战项目(对比RNN、LSTM、GRU模型)
  • 记录基于scapy构造ClientHello报文的尝试
  • 程序设计实践学习笔记
  • Ubuntu中apt-get update显示域名解析失败
  • go学习之简单项目
  • 代码随想录二刷 | 数组 | 总结篇
  • go test 命令详解
  • 【Mysql学习笔记】1 - Mysql入门
  • sentinel 网关
  • 常见面试题-MySQL的Explain执行计划
  • SpringBoot静态资源配置
  • Java拼图
  • Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面
  • Java 实现随机图形
  • java 读写文件的代码。
  • 如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?
  • 文本向量化
  • java--贪吃蛇
  • 录制第一个jmeter性能测试脚本2(http协议)
  • pip命令大全
  • Redis篇---第二篇
  • 【LeetCode刷题日志】232.用栈实现队列
  • 单元测试实战(二)Service 的测试