问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中的联合又叫什么?

发布网友 发布时间:2022-04-24 08:20

我来回答

4个回答

热心网友 时间:2022-06-17 23:35

c语言的联合(union)介绍 “联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。如前面介绍的“单位”变量, 如定义为一个可装入“班级”或“教研室”的联合后,就允许赋予整型值(班级)或字符串(教研室)。要么赋予整型值,要么赋予字符串,不能把两者同时赋予它。联合类型的定义和联合变量的说明一个联合类型必须经过定义之后, 才能把变量说明为该联合类型。 一、联合的定义 定义一个联合类型的一般形式为: union 联合名 { 成员表 }; 成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。 例如: union perdata { int class; char office; }; 定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。 二、联合变量的说明 联合变量的说明和结构变量的说明方式相同, 也有三种形式。即先定义,再说明;定义同时说明和直接说明。以perdata类型为例,说明如下: union perdata { int class; char officae; }; union perdata a,b; /*说明a,b为perdata类型*/ 或者可同时说明为: union perdata { int class; char office; }a,b; 或直接说明为: union { int class; char office; }a,b 经说明后的a,b变量均为perdata类型。 它们的内存分配示意图如图7—8所示。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于 office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。 联合变量的赋值和使用 对联合变量的赋值,使用都只能是对变量的成员进行。 联合变量的成员表示为: 联合变量名.成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class a.office 不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行?挂 偾康魉得鞯氖?一个联合变量, 每次只能赋予一个成员值?痪浠八?一个联合变量的值就是联合变员的某一个成员值。 [例7.15]设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。 编程输入人员数据, 再以表格输出。 [code:1:8d8ee8c82c] 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); } } [/code:1:8d8ee8c82c] 本例程序用一个结构数组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语句用于输出各成员项的值: 本章小结 1. 结构和联合是两种构造类型数据,是用户定义新数据类型的重要手段。结构和联合有很多的相似之处,它们都由成员组成。成员可以具有不同的数据类型。成员的表示方法相同。都可用三种方式作变量说明。 2. 在结构中,各成员都占有自己的内存空间,它们是同时存在的。一个结构变量的总长度等于所有成员长度之和。在联合中,所有成员不能同时占用它的内存空间,它们不能同时存在。联合变量的长度等于最长的成员的长度。 3. “.”是成员运算符,可用它表示成员项,成员还可用“->”运算符来表示。 4. 结构变量可以作为函数参数,函数也可返回指向结构的指针变量。而联合变量不能作为函数参数,函数也不能返回指向联合的指针变量。但可以使用指向联合变量的指针,也可使用联合数组。 5. 结构定义允许嵌套,结构中也可用联合作为成员,形成结构和联合的嵌套。 6. 链表是一种重要的数据结构,它便于实现动态的存储分配。本章介绍是单向链表,还可组成双向链表,循环链表等。

参考资料:http://hi.baidu.com/starcyh12/blog/item/70f84c34b526334b241f147c.html

热心网友 时间:2022-06-17 23:35

union 形式是结构体差不多,只是它是共享内存段的,

记得有家公司的面试题是,编程实现怎样判断CPU的大小端。

典型的做法就是用联合来解决啊···

热心网友 时间:2022-06-17 23:36

联合又称联合体或共用体(union),共用体是通过成员的相互覆盖,是的几个不同的变量共占一段内存,以此大道节省内存的目的。
union data
{
int i;
char c;
float f;
} a;
上面的作用是定义联合体,举个例子吧,就像你定义一个整型常量,如 int b=1
上面的那段代码等同与int,他是告诉系统有这么一个变量,那么接下来就是设置一个常量了,}号后面接着的a就像int b=1中的b一样,系统这时就会为a这一个变量分配内存空间。
上面的联合体里有3个成员,也就是说有3个变量,A选项就是正确的赋值方式,就像b赋值为1一样,如果你想对具体某个成员赋值的话,就要用到“.”号或
“->”号,通常用“.”。

热心网友 时间:2022-06-17 23:36

不知道。
按联合定义,它是
内存 公用/共享 变量声明
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在厨师一个月工资是多少,炒菜和配菜,在什 成都厨房工资多少钱一个月 现在厨师一个月工资是多少,炒菜和配菜,在什么地方的价格,请详细点,谢 ... 华硕电脑上没有触摸板设置华硕笔记本电脑触摸板怎么开启 新买的光碟DVD-R是空白的,我想把他制作成一个系统光碟,谁知道怎么制 ... 请问空白光盘刻录车载DVD后,播放时只有目录放不出来是怎么回事啊?_百 ... 请问将一张DVD-R空白光盘作为数据盘使用能够重复写入或者续写数据吗?谢 ... 我现在有DVD-R盘,怎样刻录?一定需要刻录机吗? 做辣椒酱为什么要放酒 做辣椒酱为啥要放酒 2024年区块链的趋势和方向 金属给排水管有哪些连接方式 C2935是迪卡品种吗 活套法兰的其他标准 pARMⅠCⅠANⅠ什么牌子手表 法兰连接150CL 、300CL ,150CL和300CL 是什么?是多少压力? 法兰 LF&#47;SE-RF ,LF、SE和RF分别是什么? PE给水管有哪些连接方式? 我在招聘网上看到的上海公司在高薪直招C照了司机是真的吗? 请问各位大侠,什么情况下用活套法兰? 松套法兰和活套法兰有什么区别,最好能有标准可以对照!因为在HG20592里面只有松套法兰没有活套法兰 碳钢的活套法兰的活套材质是什么? 活套法兰---结构和标准 吉他和弦是什么意思?C大调,A小调什么意思? 活套法兰的介绍 什么是活套法兰? 如何在微信群里发送聊天记录? 已获得专科毕业证,怎样申请中国高等教育学历认证报告? 1998年毕业的大专文凭是否可提供学历认证? 宜宾方言的宜宾话例 宜宾九人头大惨案纪实,凶犯为何如此丧心病狂? 宜宾那里有什样卷面皮买?只要面皮批发的? 法兰执行标准nb/t47021-2012是什么法兰 什么是法兰,为什么叫法兰能不能详细 最近想入 ysl唇膏口红圆管的,纠结颜色中,暗黄肤色适用哪个色,求介绍 圣罗兰口红几号最好看 想送女朋友一个ysl口红。圆管。有什么色号的推荐吗?她是比较清纯的那种类型,原唇色偏淡,平时嘴唇比 ysl圆管16号适合什么肤色? YSL唇膏圆管有几个系列,包装上有什么不同,最好有图片对比 YSL圆管口红底标批号是62PO0W14是什么意思? 同门兄弟 松下等离子G10与S10如何选择 松下等离子电视,S系列和U系列的 做梦梦见太阳一直不落,太阳光发白,有点像中午的太阳,看看表那时晚上10点多了。 小个体户营业执照需要注销吗 在办理营业执照的时候,需要注意些什么? 个体营业执照需要注册公司吗? 现在营业执照注销需要什么证件 营业执照要注册资金吗? 怎么增大音量 方便面的调料包怎么配制的? 调料包有什么东西? 吃米饭喝什么汤