C 语言共用体(Union)

C 语言共用体(Union)

在本教程中,您将学习C语言编程中的共用体。更具体地说,如何创建共用体(联合体),访问其成员以及了解共用体与组织之间的差异。共用体又被称为联合体, 和结构体同属于C语言数据类型中的结构类型。

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。

union也是一种用户定义的类型,类似于C中的struct,除了一个关键字的区别。结构体分配足够的空间存储其所有成员,而共用体分配空间仅存储最大的成员。

如何定义共用体?

我们使用union关键字定义共用体。这是一个实例:

union car
{char name[50];int price;
};

上面的代码定义了派生类型union car。

创建union变量

定义共用体后,它将创建用户定义的类型。但是,没有分配内存。要为给定的联合类型分配内存并使用它,我们需要创建变量。

这是我们创建联合变量的方法。

union car
{char name[50];int price;
};int main()
{union car car1, car2, *car3;return 0;
}

创建联合变量的另一种方法是:

union car
{char name[50];int price;
} car1, car2, *car3;

在这两种情况下,都会创建union car类型的union变量car1、car2和union指针car3。

访问共用体成员

我们使用.运算符来访问共用体的成员。要访问指针变量,我们还使用->运算符。

在上面的示例中,

  • 要访问car1的价格(price),请使用car1.price。
  • 要访问car3的价格(price),可以使用(* car3).price或car3-> price。

共用体与结构体之间的区别

让我们以一个实例来说明共用体与结构体之间的区别:

#include <stdio.h>
union unionJob
{//定义 unionchar name[32];float salary;int workerNo;
} uJob;struct structJob
{char name[32];float salary;int workerNo;
} sJob;int main()
{printf("union 的大小 = %d 字节", sizeof(uJob));printf("\nstruct 的大小 = %d 字节", sizeof(sJob));return 0;
}

输出结果

union 的大小 = 32 字节
structure 的大小  = 40 字节

为什么联合变量和结构变量的大小存在这种差异?

在这里,sJob大小为40个字节,因为

  • name[32]的大小是32个字节
  • salary的大小是4个字节
  • workerNo的大小是4个字节

但是,uJob大小为32个字节。这是因为联合变量的大小将始终是其最大元素的大小。在上面的示例中,其最大元素(name[32])的大小为32个字节。

使用共用体,所有成员共享相同的记忆

示例:访问共用体会员

#include <stdio.h>
union Job {float salary;int workerNo;
} j;int main() {j.salary = 12.3;//当j.workerNo被赋值时,// j.salary将不再保留12.3j.workerNo = 100;printf("薪水 = %.1f\n", j.salary);printf("工人人数 = %d", j.workerNo);return 0;
}

输出结果c

薪水 = 0.0
工人人数 = 100

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

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

相关文章

Mendix与Java组件的完美结合实践

前言 在技术驱动的今天&#xff0c;应用开发的速度和质量已经成为企业竞争力的决定性因素。Mendix&#xff0c;作为一款领先的低代码开发平台&#xff0c;已经为全球数千家企业提供了快速、高效的开发解决方案。但在某些情况下&#xff0c;企业的特定需求可能超出了Mendix的标…

sqli-labs(3)

11. 看到登录框直接or 11 在hackerabar中我们可以看到这里是post传递的数据&#xff0c;在get中用--来注释后面的内容 因为get中#是用来指导浏览器动作的&#xff0c;--代表注释是空格&#xff0c;所以这里用# 之后就和get的一样了 1 order by 2 # order by 3报错 联合注入 …

21款奔驰GLS450升级23P驾驶辅助 提升安全出行

辅助驾驶越来越多的被大家所青睐&#xff01;为了提升驾驶安全性和舒适便捷性奔驰改装原厂半自动驾驶23P辅助系统 23P智能辅助驾驶系统还是很有必要的&#xff0c;因为在跑高速的时候可以使用23P智能驾驶的自动保持车速&#xff0c;保持车距&#xff0c;车道自动居中行驶以及自…

CRM商机管理软件:构建客户为中心的管理理念

企业为什么选择CRM商机管理软件&#xff1f;1.CRM软件能够帮助企业建立以客户为中心的管理理念&#xff1b;2.CRM商机管理软件全面直观的展示客户数据&#xff1b;3.市场人员可以制订个性化的营销策略&#xff1b;4.移动应用为外出的销售带来的便利。 1.构建客户为中心的管理理…

C++实现KNN和K-Means

学校机器学习课程的实验课要求实现KNN和K-Means&#xff1a; &#xff08;平时没听课&#xff09;临时去查了一下KNN和K-Means是啥&#xff0c;然后自己用C写了小例子&#xff0c;想着写都写了那就把代码贴出来吧。 顺便再聊聊自己对于这俩算法的理解。 下面是文心一言的回答…

十年诉讼,迈瑞真的赢了吗?

迁延十年&#xff0c;迈瑞与科曼的知识产权纠纷案究竟要如何解读&#xff1f; 发端于2013年&#xff0c;两家国内医疗器械行业知名公司间的专利互诉官司&#xff0c;成为全行业最具代表性的案例。但这一案例本质并不复杂&#xff1a;不过商业利益之争。 要在烈度不断抬升的市…

项目管理PMP6.0-五大过程组、十大知识领域、四十九个过程(记忆码:7664363734)

项目管理PMP6.0-五大过程组、十大知识领域、四十九个过程&#xff08;记忆码&#xff1a;7664363734&#xff09; 项目经理的影响力范围三者关系图&#xff08;五大过程组、十大知识领域、四十九个过程&#xff09;五大过程组十大知识领域十大知识领域之间联系 四十九个过程&am…

如何通过提升客户体验带来更大的增长、更好的客户留存率?

客户期望的转变 在一个日益数字化的世界里&#xff0c;有必要采取以客户为中心的思维方式。因为客户与企业互动的方式有很多是在数字空间发生的&#xff0c;客户的需求和模式已经转变。 这种情况已经酝酿了几年&#xff0c;但在2020年才打开闸门。随着疫情的爆发&#xff0c;企…

FTX的前世今生:崛起、辉煌与崩塌

FTX&#xff0c;一度被誉为加密货币领域的明星交易所&#xff0c;其快速的崛起和令人瞩目的崩塌吸引了全球的关注。让我们回顾一下FTX的前世今生&#xff0c;了解其短暂的辉煌和骤然的崩塌。 1. 崛起&#xff1a; FTX的创始人山姆班克曼-弗里德在加密货币领域具有深厚的背景和…

Linux主机间的相互免秘钥

主机间的相互免秘钥 1.生成密钥 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa运行以上命令后会在 ~/.ssh/ 目录下生成一对密钥对。 2.拷贝公钥 把自己的公钥传递给对方主机即可&#xff0c;这个公钥文件必须放在对方主机的~/.ssh/authorized_keys 文件中。 ssh-copy-id -i ~/.s…

智能座舱架构与芯片 - (2) 架构篇

一、定义 1.1 智能座舱定义 按照百度百科的定义&#xff0c;智能座舱&#xff08;intelligent cabin&#xff09;旨在集成多种IT和人工智能技术&#xff0c;打造全新的车内一体化数字平台&#xff0c;为驾驶员提供智能体验&#xff0c;促进行车安全。目前国内外已经有很多研究…

Django ORM 执行复杂查询的技术与实践

概要 Django ORM&#xff08;Object-Relational Mapping&#xff09;是 Django 框架的核心组件之一&#xff0c;提供了一种高效、直观的方式来处理数据库操作。尽管简单查询在 Django ORM 中相对容易实现&#xff0c;但在面对复杂的数据请求时&#xff0c;需要更深入的了解和技…

SSM应用程序启动流程

在一个基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的Web应用程序中&#xff0c;启动过程涉及到Spring的IOC容器和MVC容器的初始化。 IOC容器初始化&#xff1a; Spring的IOC容器主要负责管理和装配应用程序中的各个Bean。在SSM框架中&#xff0c;IOC容器的…

【文末送书】深入浅出嵌入式虚拟机原理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

「Verilog学习笔记」含有无关项的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output reg match);reg [8:0] a_tem ; always (posedge clk or negedge rst_n) begin if (~rs…

多行溢出显示省略号css

css高级应用三种方法实现多行省略 - 掘金

巨量广告投放时间段和计划类型如何配合使用?

投放时间&#xff1a; 1: 从今天起长期投放 2: 设置开始和结束日期 投放时段 1:不限 2:指定时间段 99%计划会选择从今天起长期投放 计划开启后一般不会暂停&#xff0c;暂停相当于给计划判了无期徒刑&#xff0c;中断系统探索&#xff0c;本来生命周期有3天&#xff0c;暂…

maven打包项目,然后给其他项目引用

A项目&#xff08;这个项目需要被打包&#xff0c;作为被引入的项目&#xff09;&#xff0c;不需要启动类&#xff0c;因为作为公共模块被B项目引入&#xff1a; package com.yunya.mvndependontest.rest;import org.springframework.web.bind.annotation.RequestMapping; im…

SpringDoc枚举字段处理与SpringBoot接收枚举参数处理

本期内容 添加SpringDoc配置展示枚举字段&#xff0c;在文档页面中显示枚举值和对应的描述添加SpringMVC配置使项目可以接收枚举值&#xff0c;根据枚举值找到对应的枚举 默认内容 先不做任何处理看一下直接使用枚举当做入参是什么效果。 定义一个枚举 package com.exampl…

计算机网络:数据链路层

0 本节主要内容 问题描述 解决思路 1 问题描述 数据链路层主要面临四个问题&#xff1a; 封装成帧&#xff1b;透明传输&#xff1b;差错检测&#xff1b;实现相邻节点之间的可靠通信。 1.1 子问题1&#xff1a;封装成帧 怎么知道数据从哪里开始&#xff1f;到哪里结束&a…