c语言,联合体

news2024/9/21 19:29:39

一.什么是联合体:

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

二.联合体类型的声明:

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];
       };
   };
};

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚类分析 | Matlab实现基于PCA+DBO+K-means的数据聚类可视化

聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化 目录 聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PCA&#xff08;主成分分析&#xff09;、DBO&#xff08;蜣螂优化算法&#xff09;和K-means聚类…

【观察】紫光云:紫鸾5.0云平台“再升级”,为政企客户提供新质生产力

毫无疑问&#xff0c;数字化既是这个时代前进所趋&#xff0c;也是国家战略所指&#xff0c;更是所有企业在未来发展中已达成的高度共识。 在此过程中&#xff0c;千姿百态、复杂多样的应用场景&#xff0c;可以看做是遍布数字中国的“点”&#xff1b;百行百业、各种类型的行业…

阿里云发布 AI 编程助手 “通义灵码”——VSCode更强了 !!

文章目录 什么是 通义灵码&#xff08;TONGYI Lingma&#xff09; 快速体验“通义灵码” 什么是“通义灵码”&#xff08;TONGYI Lingma&#xff09; 通义灵码&#xff08;TONGYI Lingma&#xff09;&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff…

idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 班级通讯录管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 班…

【linux】Debian访问Debian上的共享目录

要在Debian系统上访问共享目录&#xff0c;通常意味着要访问通过网络共享的文件夹&#xff0c;比如通过SMB/CIFS&#xff08;Server Message Block/Common Internet File System&#xff09;协议共享的Windows共享文件夹。以下是访问共享目录的步骤&#xff1a; 1. 安装必要的…

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 边缘设备图像识别及部署(二)

专栏目录 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 – 整体介绍&#xff08;一&#xff09; 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 -- 边缘图像识别及部署&#xff08;二&#xff09; 前言边缘图像识别与推流整体思路原始…

蓝桥杯刷题总结(Python组)

1、蛇形矩阵 解题思路&#xff1a;每次赋值后都对方向进行改变&#xff0c;一般上下左右就是&#xff08;-1&#xff0c;0&#xff09;&#xff0c;&#xff08;0&#xff0c;1&#xff09;&#xff0c;&#xff08;1&#xff0c;0&#xff09;&#xff0c;&#xff08;0&…

分布式事务的解决方案--Seata架构

一、Seata的XA模式 二、AT模式原理 三、TCC模式原理 四、MQ分布式事务 异步&#xff0c;非实时&#xff0c;实现最终的一致性。 四、分布式事务的解决方案

【MLLM+轻量多模态模型】24.02.Bunny-v1.0-2B-zh: 轻量级多模态语言模型 (效果一般)

24.02 北京人工智能研究院&#xff08;BAAI&#xff09;提出以数据为中心的轻量级多模态模型 arxiv论文&#xff1a;2402.Efficient Multimodal Learning from Data-centric Perspective 代码&#xff1a;https://github.com/BAAI-DCAI/Bunny 在线运行&#xff1a;https://wis…

CSS元素定位(学习笔记)

一、 z-index 1.1 作用 规定元素的堆叠顺序,取值越大&#xff0c;层级越往上 1.2 属性值 属性值为数字&#xff0c;可以取负值&#xff0c;不推荐 默认值&#xff1a;auto(跟父元素同一层级) 1.3 注意 必须配合定位(static除外)使用&#xff0c;默认情况下&#xff0c;后面的元…

openssl3.2 - exp - openssl speed test

文章目录 openssl3.2 - exp - openssl speed test概述笔记表面上能列出的算法集合没列出的算法, 有的也支持不支持的算法的例子直接提示算法不支持算法的属性找不到到底哪些算法才是可以测试的算法?那看看哪些算法是支持的?包含支持的算法的名称数组在算法失败的提示处, 将支…

【Redis】缓存穿透

问题发生背景&#xff1a;客户端请求的数据再缓存中和数据库中都不存在。 导致的问题&#xff1a;缓存永远不会生效&#xff0c;这些请求都会去请求数据库—导致数据库压力增大。 解决方案&#xff1a; 1.缓存空对象 在Redis中缓存空对象&#xff0c;告诉客户端数据库中没有该值…

Python快速导入id至json文件(2024.3.19)

Python实现id导入至json文件 2024.3.19 需求分析1、输入数据介绍1.1 三个.txt文件1.1.1 computers.txt&#xff08;计算机&#xff09;1.1.2 cameras.txt&#xff08;摄像头&#xff09;1.1.3 monitors.txt&#xff08;显示器&#xff09; 1.2 单个.xlsx文件 2、实现思路3、Pyt…

Day21:实现退出功能、开发账号设置、检查登录状态

实现退出功能 将登录凭证修改为失效状态。跳转至网站首页。 数据访问层 不用写了&#xff0c;已经有了updateStatus方法&#xff1b; 业务层 UserService public void logout(String ticket) {loginTicketMapper.updateStatus(ticket, 1);}Controller层 RequestMapping(p…

opc客户端

支持opc&#xff0c;da&#xff0c;ua通信&#xff08;匿名登陆及用户登陆&#xff09; 支持批量节点数据监听&#xff0c;当数据有变化时更新 支持单个节点读取和写入 KeepServer做为modbus server keepserver通信配置 https://blog.csdn.net/xiaochenXIHUA/article/detail…

【Qt问题】使用QSlider创建滑块小部件无法显示

问题描述&#xff1a; 使用QSlider创建滑块小部件用于音量按钮的时候&#xff0c;无法显示&#xff0c;很奇怪&#xff0c;怎么都不显示 一直是这个效果&#xff0c;运行都没问题&#xff0c;但是就是不出现。 一直解决不了&#xff0c;最后我在无意中&#xff0c;在主程序中…

【开发】Redis 的理解与数据存储格式

目录 相关传送门 1. NOSQL和关系型数据库比较 2. 主流的NOSQL产品 3. Redis的理解 4. redis数据存储格式 4.1 String 4.2 Hash 4.3 List 4.4 Set 4.5. sorted_set 注&#xff1a;手机端浏览本文章可能会出现 “目录”无法有效展示的情况&#xff0c;请谅解&#xf…

2、RabbitMQ_安装

RabbitMQ安装文档 RabbitMQ官网下载地址&#xff1a;https://www.rabbitmq.com/download.html 1.安装依赖 在线安装依赖环境&#xff1a; yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc x…

【算法与数据结构】二叉树(前中后)序遍历

文章目录 &#x1f4dd;前言&#x1f320; 创建简单二叉树&#x1f309;二叉树的三种遍历&#x1f320;前序&#x1f309;中序遍历 &#x1f320;后序遍历 &#x1f320;二叉树节点个数&#x1f309;二叉树节点个数注意点 &#x1f6a9;总结 &#x1f4dd;前言 一棵二叉树是结…

为什么选择 Flink 做实时处理

优质博文&#xff1a;IT-BLOG-CN 为什么选择 Flink 【1】流数据更真实地反映了我们的生活方式&#xff08;实时聊天&#xff09;&#xff1b; 【2】传统的数据架构是基于有限数据集的&#xff08;Spark 是基于微批次数据处理&#xff09;&#xff1b; 【3】我们的目标&#xf…