c语言,联合体

一.什么是联合体:

像结构体一样,联合体也是由一个或多个成员变量组成的这些成员变量可以是不同的类型,但编译器只给最大成员分配足够的内存,联合体体内的成员都是公用一块空间的,因此联合体也叫做共同体

二.联合体类型的声明:

union Un//
{
 char c;
 int i;
};
int main()
{
	union Un un={0};//
	printf("%d",sizeof(un));
	return 0;
}
//输出结果为4

和结构体很像其实

三.联合体的特点:

#include <stdio.h>
union Un
{
 char c;
 int i;
};
int main()
{
 union Un un = {0};
 printf("%p\n", &(un.i));
 printf("%p\n", &(un.c));
 printf("%p\n", &un);
 return 0;
}
//最终三个输出结果都指向同一地址,更加说明了联合体内元素成员公用同一地址

四.结构体和结合体储存的区别:

在这里插入图片描述

五.联合体大小的计算:

#include<stdio.h>
union Un1
{
char a[6];
int b;
};
union Un2
{
short c[5];
int d;
};
int main()
{
printf("%d/n",sizeof(Un1));
printf("%d/n",sizeof(Un2));
return 0;
}
//输出结果为8 16

在Un1中虽然int 的类型要比char大,但char有五个元素,也就需要五个字节,在这种情况下,short就可以看做是Un1中最大的成员,那为什么最终输出结果是8而不是五呢?和结构体的规则类似,即使是联合体也需要最终成员元素和偏移值的对齐数为某个整数的倍数。
那么Un2也和Un1一同理,short 有六个元素,需要12个字节的大小,祖自宏结果又需要为某个整数的倍数,所以输出结果为16,而非12,。

六.联合体的应用:

那既然有结构体了,结构体也很方便和联合体也很像为什么还要学习联合体?答案就是在某些场景下联合体所占内存空间更少,可以减少无意义内存的占用。比如
为百货商店内的各类商品(书籍,裙子,玩具)便于管理,而设置一个程序:
解题:
先来分析三者都具有些什么属性:
书籍:价格,名称,作者
裙子:价格,名称,尺码
玩具:价格,名称,材质
三者具有相同的属性为价格,名称,不同的属性为作者,尺码,材质
如果仅仅通过结构体来编程,那最终的编程结果就是三个结构体

struct comm
{
//公共属性
price b;
name o;
//特殊属性
auther k;
size r;
tex z;
};

可是对于上述代码,在调用书籍的三个属性时裙子和玩具的特殊属性所占空间就被浪费掉了,但是如果通过联合体就可以避免空间被浪费

struct comm
{
   double price ;
   char name [20];
   union a
  {
       struct book
       {
       char auther [20];
       };
       struct skirt
       {
        char size [20];
       };
       struct toy
       {
       char tex [20];
       };
   };
};

通过联合体修改后的代码就可在需要调用的书籍的三个属性时不会使裙子和玩具的特殊属性也占用空间了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySql安装与卸载—我耀学IT

1.MySql安装 打开下载的mysql安装文件mysql-5.5.27-win32.zip&#xff0c;双击解压缩&#xff0c;运行“setup.exe”。 选择安装类型&#xff0c;有“Typical&#xff08;默认&#xff09;”、“Complete&#xff08;完全&#xff09;”、“Custom&#xff08;用户自定义&…

04|调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM?

大语言模型发展史 Transformer是几乎所有预训练模型的核心底层架构。基于Transformer预训练所得的大规模语言模型也被叫做“基础模型”&#xff08;Foundation Model 或Base Model&#xff09;。 在预训练模型出现的早期&#xff0c;BERT毫无疑问是最具代表性的&#xff0c;也…

HTTP 工作流程请求响应 - 面试常问

文章目录 HTTP 工作流程请求和响应格式HTTP请求格式请求行&#xff1a;请求头部字段&#xff1a;空行&#xff1a;消息正文&#xff08;请求正文&#xff09;&#xff1a; HTTP响应格式状态行&#xff1a;响应头部字段&#xff1a;空行&#xff1a; HTTP方法HTTP状态码常用HTTP…

详解基于快速排序算法的qsort的模拟实现

目录 1. 快速排序 1.1 快速排序理论分析 1.2 快速排序的模拟实现 2. qsort的模拟实现 2.1 qsort的理论分析 2.2 qsort的模拟实现 qsort函数是基于快速排序思想设计的可以针对任意数据类型的c语言函数。要对qsort进行模拟实现&#xff0c;首先就要理解快速排序。 1. 快…

Odoo17免费开源ERP开发技巧:如何在表单视图中调用JS类

文/Odoo亚太金牌服务开源智造 老杨 在Odoo最新V17新版中&#xff0c;其突出功能之一是能够构建个性化视图&#xff0c;允许用户以独特的方式与数据互动。本文深入探讨了如何使用 JavaScript 类来呈现表单视图来创建自定义视图。通过学习本教程&#xff0c;你将获得关于开发Odo…

在IDEA中设置使用鼠标滚轮控制字体大小

IDEA是我们常用的程序编程工具&#xff0c;有时为了方便&#xff0c;我们需要随时的调整字体的大小 本篇文章我使用了两种方式来设置IDEA中的字体大小 方式一&#xff1a;使用传统的方式来设置 首先在IDEA顶部的菜单栏中选择“file”菜单 然后在“file”菜单中选择“Setting…

Linux进程通信补充——System V通信

三、System V进程通信 ​ System V是一个单独设计的内核模块&#xff1b; ​ 这套标准的设计不符合Linux下一切皆文件的思想&#xff0c;尽管隶属于文件部分&#xff0c;但是已经是一个独立的模块&#xff0c;并且shmid与文件描述符之间的兼容性做的并不好&#xff0c;网络通…

TCL管理Vivado工程

文章目录 TCL管理Vivado工程1. 项目目录2. 导出脚本文件3. 修改TCL脚本3.1 project.tcl3.2 bd.tcl 4. 工程恢复 TCL管理Vivado工程 工程结构 1. 项目目录 config: 配置文件、coe文件等。doc: 文档fpga: 最后恢复的fpga工程目录ip: ip文件mcs: bit流文件等,方便直接使用src: .…

蓝桥杯物联网竞赛_STM32L071_12_按键中断与串口中断

按键中断&#xff1a; 将按键配置成GPIO_EXTI中断即外部中断 模式有三种上升沿&#xff0c;下降沿&#xff0c;上升沿和下降沿都会中断 external -> 外部的 interrupt -> 打断 trigger -> 触发 detection -> 探测 NVIC中将中断线ENABLE 找接口函数 在接口函数中写…

UE 蓝图场景搭建全流程

点个关注不迷人&#xff0c;可私信帮您解决问题&#xff1a; 学习的知识点&#xff1a; 1、cityEngine 2、bleneder 3、M3工具 4、Uv 基础学习 5、Gameplay 框架 内容很长详情关注&#xff0c;回复ue 获取UE 全流程免费视频教程

OpenCV 单目相机标定

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 单目相机的标定过程与双目相机的标定过程很类似,具体过程如下所述: 1、首先我们需要获取一个已知图形的图像(这里我们使用MATLAB所提供的数据)。 2、找到同名像点(匹配点),这里主要是探测黑白格子之间的角点…

本地虚拟机平台Proxmox VE结合Cpolar内网穿透实现公网远程访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

【数据挖掘算法与应用】——数据挖掘导论

数据挖掘导论 导入一、为什么要进行数据挖掘1.数据爆炸但知识贫乏2.数据在爆炸式增长3.数据安全4.从商业数据到商业智能的进化5.KDD的出现 二、什么是数据挖掘1.广义技术角度的定义2.狭义技术角度的定义3.商业角度的定义4.数据挖掘与其他科学的关系5.数据挖掘对象6.挖掘到什么知…

数据结构——B树和B+树

数据结构——B树和B树 一、B树1.B树的特征2.B树的插入操作3.B树的删除操作4.B树的缺点 二、B树B树的特征 平衡二叉树或红黑树的查找效率最高&#xff0c;时间复杂度是O(nlogn)。但不适合用来做数据库的索引树。 因为磁盘和内存读写速度有明显的差距&#xff0c;磁盘中存储的数…

[HackMyVM]靶场 Zon

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

Python和R的区别是什么,Python与R的应用场景是什么?

如果你这么问&#xff0c;那么你可能正站在数据科学的起点。对于志在成为数据专业人员的你来说&#xff0c;学习编程是无疑的。我想行你早就听过Python 与R的比较之声&#xff0c;并在选择中感到困惑。在此&#xff0c;我想说&#xff0c;也算是一种安慰吧&#xff1a;对于语言…

利用textarea和white-space实现最简单的文章编辑器 支持缩进和换行

当你遇到一个非常基础的文章发布和展示的需求&#xff0c;只需要保留换行和空格缩进&#xff0c;你是否会犹豫要使用富文本编辑器&#xff1f;实际上这个用原生的标签两步就能搞定&#xff01; 1.直接用textarea当编辑器 textarea本身就可以保存空格和换行符&#xff0c;示例如…

主存中存储单元地址的分配

主存中存储单元地址的分配 为什么写这篇文章? 因为我看书中这部分时&#xff0c;看到下面的计算一下子没反应过来&#xff1a; 知识回顾&#xff08;第1章&#xff09; 计算机系统中&#xff0c;字节是最小的可寻址的存储单位&#xff0c;通常由8个比特&#xff08;bit&…

IDEA直接打包Docker镜像

以下为使用IDEA打包Docker镜像并推送到远程仓库&#xff08;使用Windows打包Docker镜像并推送到远程仓库&#xff09;教程 1 安装Docker Desktop 下载地址&#xff1a;https://www.docker.com/products/docker-desktop/ 安装成功后&#xff0c;可在cmd查看版本号 2 启动Do…

天眼销批量查询功能上线

天眼销是一款提供企业线索的产品&#xff0c;致力于帮助客户获取最新的企业联系方式、工商信息等关键数据。 数据库收录全国 3.3亿及以上企业(含个体)线索&#xff0c;涵盖企业名称、企业状态、注册时间、注册资本、经营范围、法人信息、联系方式等维度&#xff0c;为用户提供…