C语言程序设计基础之联合

超详细C语言联合体union详解 文章目录前言一、联合(共用体)定义二、联合的特点及运用三、联合的大小计算总结 前言 上一期C语言快速入门我们学习了枚举类型及相关知识点,这期我们来跟着笔者学习一下联合体相关知识,相信聪明的你一定会有所收获! 提示:以下是本篇文章正文内容,下面案例可供参考 一、联合(共用体)定义 联合是一种特殊的自定义类型,该种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合体也被称为共用体。 代码如下(示例): #include<stdio.h> union Un//联合类型的声明. 阅读详情

  “联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。如前面介绍的“单位”变量, 如定义为一个可装入“班级”或“教研室”的联合后,就允许赋予整型值(班级)或字符串(教研室)。要么赋予整型值,要么赋予字符串,不能把两者同时赋予它。联合类型的定义和联合变量的说明一个联合类型必须经过定义之后, 才能把变量说明为该联合类型。

 
 


  一、联合的定义

  定义一个联合类型的一般形式为:

union 联合名
{
 成员表
};

  成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。

  例如:

union perdata
{
 int class;
 char office[10];
};

  定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。

  二、联合变量的说明

  联合变量的说明和结构变量的说明方式相同, 也有三种形式。即先定义,再说明;定义同时说明和直接说明。以perdata类型为例,说明如下:

union perdata
{
 int class;
 char officae[10];
};
union perdata a,b; /*说明a,b为perdata类型*/

  或者可同时说明为:

union perdata
{
 int class;
 char office[10];
}

 a,b;或直接说明为:

union
{
 int class;
 char office[10];
}
a,b 

  经说明后的a,b变量均为perdata类型。 它们的内存分配示意图如图7—8所示。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。

  联合变量的赋值和使用

  对联合变量的赋值,使用都只能是对变量的成员进行。 联合变量的成员表示为: 联合变量名.成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class a.office 不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行。还要再强调说明的是,一个联合变量, 每次只能赋予一个成员值。换句话说,一个联合变量的值就是联合变员的某一个成员值。

  [例7.15]设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。

  编程输入人员数据, 再以表格输出。

main()
{
 struct
 {
  char name[10];
  int age;
  char job;
  union
  {
   int class;
   char office[10];
  } depa;
 }body[2];
 int n,i;
 for(i=0;i<2;i++)
 {
  printf("input name,age,job and department/n");
  scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);
  if(body[i].job=='s')
   scanf("%d",&body[i].depa.class);
  else
   scanf("%s",body[i].depa.office);
 }
 printf("name/tage job class/office/n");
 for(i=0;i<2;i++)
 {
  if(body[i].job=='s')
   printf("%s/t%3d %3c %d/n",body[i].name,body[i].age,body[i].job,body[i].depa.class);
  else
   printf("%s/t%3d %3c %s/n",body[i].name,body[i].age,
   body[i].job,body[i].depa.office);
 }
}

  本例程序用一个结构数组body来存放人员数据, 该结构共有四个成员。其中成员项depa是一个联合类型, 这个联合又由两个成员组成,一个为整型量class,一个为字符数组office。在程序的第一个for语句中,输入人员的各项数据,先输入结构的前三个成员name,age和job,然后判别job成员项,如为"s"则对联合depa·class输入(对学生赋班级编号)否则对depa·office输入(对教师赋教研组名)。

  在用scanf语句输入时要注意,凡为数组类型的成员,无论是结构成员还是联合成员,在该项前不能再加"&"运算符。如程序第18行中
body[i].name是一个数组类型,第22行中的body[i].depa.office也是数组类型,因此在这两项之间不能加"&"运算符。程序中的第二个for语句用于输出各成员项的值。
 

【联合体的定义、大小;联合体变量的定义、初始化、访问和赋值】(学习笔记15--联合体) 目录联合体的定义联合体的大小联合体变量的定义联合体变量的初始化联合体变量的访问和赋值 联合体也称共用体或公用体,它和结构体相像,主要在类型定义格式的成员访问方面,但在内存存储上却有着天壤之别 联合体的定义 使用union关键字 union 联合体名 { 数据类型 成员1; 数据类型 成员2; ... }; 和结构体的定义格式非常相似,唯一不同的地方,就是把关键字struct换成了union 联合体的大小 联合体变量的定义 联合体变量的初始化 联合体变量的访问和赋值 ... 阅读详情

相关推荐

C语言程序设计基础与进阶

本文还有配套的精品资源,点击获取 简介:本书是廖雷主编的《C语言程序设计(第2版)》,深入讲解C语言的基础和高级特性。作为经典教材,它不仅适合作为初学者的入门指南,也适合已有基础者巩固知识。C语言作为系统编程和嵌入式开发的关键语言,书中涵盖了基本语法、函数、指针、数组、字符串、结构体、联合体、预处理器、标准输入输出、内存管理、错误处理和文件操作等重要知识点。实例练习、理论学...

weixin_42389113的博客 813

C语言 联合(union)

1. 联合简介 联合(union)是一种数据类型,他能在同一块空间中存储不同数据类型,但不是同时存储。如果我们想设计一种结构,其能存储一些既无规律,也无顺序的数据,那么就可以用到联合。 创建联合和创建结构体相同,需要声明一个模板,再用这个模板创建变量,下面给出例子: union STU { int num; char sex; double score; char name[32]; };...

qq_43001551的博客 6255

谭浩强《C语言程序设计》第三版PPT精华

C语言作为一种广泛使用的编程语言,诞生于1972年。由贝尔实验室的Dennis Ritchie设计,最初用于编写Unix操作系统。C语言具有结构化编程、低级操作能力以及高效率等特点,使其成为编程界经久不衰的经典。函数是C语言程序设计中的核心概念之一,它允许将代码划分为独立的模块,提高代码的可读性和可重用性。在本章中,我们将详细介绍函数的基本定义、调用机制以及参数的传递方式,并通过高级特性来探究函数的更多应用场景。在C语言中,函数定义包含函数返回类型、函数名、参数列表和函数体。

weixin_42579969的博客 768

C语言——联合(共用体)~~详解

联合也是一种特殊的自定义类型这种类型定义也包含一系列的成员,特征是这些成员公用同一块空间。//联合类型的声明union Un{char c;int i;};int main(){//联合类型的定义//计算联合类型变量的大小return 0;}运行结果: 4二、联合的特点联合的成员是公用一块内存空间的,那么一个联合变量的大小,至少是最大成员的大小。那么,联合的成员的地址是一样的吗?int main(){//联合类型的定义//计算联合类型变量的大小return 0;}

m0_62404808的博客 1367

C语言编程基础与实践大作业

C语言是一种通用、过程式编程语言,由Dennis Ritchie在1972年开发。它是计算机科学的基础语言之一,广泛用于操作系统、嵌入式系统、游戏开发和系统驱动编写中。C语言以其高效率和灵活性而闻名,是许多高级语言的基础。函数原型是函数定义的简要描述,它告诉编译器函数的名字、返回类型以及参数类型和个数,但不包括函数体的具体实现。函数原型对于编译器理解函数调用是必不可少的。在函数原型中,如果函数没有返回值,其返回类型应为void。让我们通过以下示例来理解函数原型的定义:// 函数原型声明。

weixin_29867767的博客 1059

《C程序设计(第3版)》源代码实践指南

本文还有配套的精品资源,点击获取 简介:《C程序设计(第3版)》是尼古拉斯·沃斯撰写的经典教材,提供清晰实用的C语言教程。该压缩包文件包含全书示例程序的源代码,帮助读者通过实践来理解和掌握C语言的各个方面。本资源覆盖了C语言的基本语法、函数、指针、数组、字符串、结构体、联合、文件操作、预处理器宏、内存管理、错误处理和编译链接等关键知识点,是学习C语言编程的宝贵实践资料。 ...

weixin_29496633的博客 703

C语言中联合详解

在C语言中,联合使用关键字union定义。与结构体一样,联合也包含多个成员,但所有成员共用一块内存。int i;float f;在上述示例中,定义了一个名为Datai(整型),f(浮点型),和str(字符串数组)。联合是C语言中强大且灵活的数据结构,可以帮助我们在不同场景下高效地管理和处理数据。在本文中,我们详细介绍了联合的定义、声明、初始化、使用、联合与结构体的区别、位域联合、联合与函数、以及实际应用场景等内容。掌握这些知识,能够大大提高编写高效、可维护的C程序的能力。

新华编程特战队 2071

C语言谭浩强版编程实践与作业解析

一维数组是最简单的数组形式,它可以存储一系列的元素。多维数组则可以被视为数组的数组,例如二维数组可以看作是一个表格,其中每个元素都是一个子数组。结构体是C语言中一种复合数据类型,允许将不同类型的数据项组合成一个单一的类型。结构体的声明通常在代码的开始处,这样可以在后面的程序中方便地创建实例。下面是一段结构体声明和创建实例的代码示例:// 定义一个结构体类型Personchar* name;int age;// 创建一个Person类型的实例并初始化// 使用结构体变量。

weixin_35649491的博客 747

大学C语言学习笔记(C语言程序设计第五版——谭浩强,翁凯C语言基础教程)基础、算法、程序结构、数组、函数、指针、枚举、结构、联合

第一章——基础 程序 程序,就是一组计算机能够识别和执行的指令。 程序设计是指从确定任务到得到结果、写出文档的全过程,一般经历一下几个阶段: 1.问题分析 2.设计算法 3.编写程序 4.对源程序进行编辑、编译和连接 5.运行程序,分析结果 计算机语言 1.计算机语言就是计算机能够识别并执行的语言 2.计算机能够直接识别和接受的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。 3.计算机语言分为低级语言和高级语言,低级语言包括汇编语言和机器语言。 4.用高级语言编写的

Etui۹(・༥・´)و的博客 7037

C语言编程实践:150个实用案例剖析

本文还有配套的精品资源,点击获取 简介:《C语言实用程序150例》是一本实用的C语言教程,通过150个精选实例,全面覆盖C语言的基础和高级特性。本书旨在帮助读者深入理解C语言概念,并通过实践提升编程技巧,适用于系统编程、嵌入式开发等领域。核心内容包括基本语法、指针、内存管理、结构体、文件操作、预处理器宏、位操作、错误处理、函数指针、标准库函数以及程序设计模式等。实例流程图辅...

weixin_42499004的博客 1097

WorkBuddy驱动SolidWorks实测:AI建模流程、参数化与许可排查指南

AI辅助三维建模正在改变工程师的重复劳动方式。其核心理念不是替代人的设计决策,而是通过AI智能体接管CAD软件中的草图绘制、特征创建、尺寸修改等高频操作,让工程师从繁琐的GUI交互中解放出来。在SolidWorks这类主流CAD平台上,这类AI助手的落地依赖环境稳定、需求描述清晰和参数化建模规范。通过将外径、孔距等关键尺寸定义为全局变量并用方程式驱动,可实现改一个数、模型自动更新的高效流程;同时,遇到“无法获得许可”等环境故障时,需要按服务状态、安全软件隔离、干净卸载的顺序排查。以WorkBuddy驱动So

weixin_28559803的博客 366

c语言输入一段字符串把d删掉,c语言程序设计试题(附答案)共37页.docx

《 C 语言程序设计》 ( 卷)考 学生 核班级印数 考核方式 闭卷 考 120 分钟 数(本试卷包括第一卷和第二卷, 间总共 第一卷第一部分:基础知 识1.答卷时40 分)2.3.核时间120 分钟 )20 项, 共 一个 C 语言程序是由(A ?主程序B.子程序转换说明符A ?十进制B.八进制若 a、 b 均为 int 型变量,且 for(b=100;a!=b;++a,++b) printf ...

weixin_39876592的博客 243

Word论文插入带有方括号序号的参考文献——尾注+交叉引用

文章目录1. 尾注功能2. 为参考文献的序号添加方括号3. 调整参考文献前的序号大小4. 重复引用同一参考文献5. 将交叉引用的序号改为带有方括号的上标序号格式6. 删除参考文献前的尾注横线 1. 尾注功能 首先使用尾注功能顺序插入参考文献,暂时不考虑方括号问题,具体操作如下: ① 将光标放在需要插入参考文献角标的地方 ② 在word菜单栏,“引用-脚注部分右下角箭头”(用来设置尾注格式) ③如...

Your_Raymond的博客 9万+

大学c语言项目,项目大学C语言程序设计期末复习重点.doc

期末复习课笔试试卷基本情况1、单项选择(本题共15个小题,每题2分。30分)在四个备选答案中选择一个正确的。答案唯一。2、阅读程序选择运行结果(本题共有8个小题,每个题3分。24分)考核基本运算。答案唯一。3、阅读程序并填空(本题共有6个小题,每空4分。24分)考察对现成算法的分析能力。? 阅读程序,在程序空白处填写适当的语句,使程序完整正确,并能够完成规定的功能。4、编写程序(本题共有3个小题,...

weixin_39908985的博客 202

实战演练 | ABAQUS显式动力学分析在金属切削仿真中的应用

本文详细介绍了如何利用ABAQUS显式动力学分析进行金属切削过程的二维仿真。通过从零开始的完整流程,包括几何建模、材料本构与失效定义、网格划分、接触设置、边界条件施加,到结果后处理与切削力提取,为工程师和研究人员提供了实用的仿真方法,以优化刀具设计和加工工艺。

purple的博客 930

Ferromagnetic soft continuum robots

本文来自机器人领域顶刊,Science Robotics。介绍了一种铁磁软连续体机器人,主要贡献为1)介绍了一个基于磁性微粒和聚合物的软连续体机器人的制造方法,在机器人外表面涂了一层水凝胶,极大地降低了摩擦阻力;2)并研究了在磁场下,不同粒子体积分数下,此机器人的驱动性能;利用手动操控的磁铁,进行了许多实验证明该机器人性能的优异性。 铁磁软连续体机器人 Ferromagnetic soft continuum robots [1] Paper Link Authors: Kim, Yoonho, et al

XU Yangxin的博客 1372

《深入探索 C 语言的奥秘》

文件操作就像是与计算机世界的书信往来,我们可以打开和关闭文件,读取和写入文件中的信息。字符串的结束标志通常是一个特殊的字符'\0',它就像是一个隐形的句号,告诉 C 语言字符串的结束位置。在调试程序时,我们要像侦探一样,仔细观察代码的运行情况,找出问题的根源。宏定义和函数有什么区别呢?函数是一个独立的小精灵,它有自己的名字和功能,可以被多次调用。无论是探索未知的科技世界,还是创造有趣的游戏世界,C 语言都能为我们提供坚实的支持。在 C 语言的奇妙世界里,我们将一同揭开它神秘的面纱,领略其无尽的魅力和力量。

DC5621的博客 475

FPGA新手必看:Create HDL Wrapper和Generating Output Products到底该先用哪个?

本文深入解析了FPGA设计中Create HDL Wrapper与Generating Output Products的正确使用顺序,帮助新手避免常见错误。详细介绍了两者的功能差异、执行顺序的底层逻辑以及工程管理的最佳实践,特别适合使用Vivado进行FPGA开发的初学者。

xk7n92h3p5m的博客 1065

结构和联合

结构体基础 聚合类型 聚合类型:能够同时存储超过一个单独的数据,C语言提供两种聚合数据类型数组和结构。 数组和结构的区别: 数组是相同类型的数据的聚合,结构是不同类型数据的聚合。 因为数组的元素长度相同可以采用下标方式访问,结构成员的长度不同,只能通过名字访问,不能通过下标来访问。 数组名在表达式中使用时被当做一个指针,而结构体变量在表达式中使用时不能被当做一个指针。 结构体的声明 ...

aiq8620的博客 227

GJB软件需求规格说明-编制指南

《软件需求规格说明》是软件开发过程必不可少的文档,并且需要评审,也是后续鉴定试验的依据,因此,非常有必要认真对待此文档。 文档对于很多开发技术人员来说是一件非常头疼的事,虽然标准有要求,但是光看标准还是难以下笔。 本文将详细讲解如何按照GJB 438C的要求编写《软件需求规格说明》。 注:文中有背景颜色内容为标准内容,加粗部分为范例。斜体部分为解释。 全文1.3万字

Abel的博客 6357

DSShop移动商城网店系统 反序列化RCE漏洞复现

DSShop单店铺移动商城网店系统的getCartList方法的cart参数存在php反序列化漏洞,攻击者可以通过漏洞执行任意代码,获取服务器权限。

0xSec 1471

2019莆田学院c语言试卷,莆田学院C语言程序设计模拟试卷_文库吧

莆田学院C语言程序设计模拟试卷_文库吧2020-10-08 19:44:49【导读】,则在屏幕上将显示MynameisJianhui。  【正文】莆田学院《C语言程序设计》课程组编第1页鬃三四驶突怠臆销珐珐殖判甫字雄贞戍率姚死母疙气愧竟斧耀侩倡宪咖卢铰进独超筐卿奏蘸甥拐里栽漆捐沪丈熄么窍遥法蹋胚厦堆吧氧滔领就捉牙辕征规谁创靠呆磅誉情惭求君侮的柴鼓茨腕等羊架呐驹贤屈台慌匹聘瞩版兑虫屋盯冶詹耕军榷稗惜...

weixin_39654751的博客 1154

OpenClaw第2章:快速安装

本章将手把手教你安装 OpenClaw。

Maynor的博客 3236
上一篇: 水滴石穿C语言之extern声明辨析
下一篇: 水滴石穿C语言之正确使用const
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值