c语言中的共用体是什么?

 我来答
刺任芹O
2022-11-16 · TA获得超过6.2万个赞
知道顶级答主
回答量:38.7万
采纳率:99%
帮助的人:8328万
展开全部
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:\x0d\x0aunion 共用体名\x0d\x0a{成员表列};\x0d\x0a\x0d\x0aunion data\x0d\x0a{\x0d\x0aint a ;\x0d\x0afloat b;\x0d\x0adoublec;\x0d\x0achard;\x0d\x0a}obj;\x0d\x0a该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。\x0d\x0a\x0d\x0aunion data /*共用体*/\x0d\x0a{\x0d\x0aint a;\x0d\x0afloat b;\x0d\x0adouble c;\x0d\x0achar d;\x0d\x0a}mm;\x0d\x0astruct stud /*结构体* /\x0d\x0a{\x0d\x0aint a;\x0d\x0afloat b;\x0d\x0adouble c;\x0d\x0achar d;\x0d\x0a};\x0d\x0amain( )\x0d\x0a{\x0d\x0astruct stud student;\x0d\x0aprintf("%d,%d",sizeof(struct stud),sizeof(union data));\x0d\x0a}\x0d\x0a运行程序输出:\x0d\x0a15,8\x0d\x0a程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。 \x0d\x0a对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。\x0d\x0a\x0d\x0a可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:\x0d\x0aunion data /*共用体*/\x0d\x0a{\x0d\x0aint a;\x0d\x0afloat b;\x0d\x0adouble c;\x0d\x0achar d;\x0d\x0a}mm;\x0d\x0a其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。\x0d\x0a\x0d\x0amain( )\x0d\x0a{\x0d\x0aunion data\x0d\x0a{\x0d\x0aint a;\x0d\x0afloat b;\x0d\x0adouble c;\x0d\x0achar d;\x0d\x0a}mm;\x0d\x0amm.a=6;\x0d\x0aprintf("%d\n",mm.a);\x0d\x0amm.c=67.2;\x0d\x0aprintf("%5.1lf\n", mm.c);\x0d\x0amm.d='W';\x0d\x0amm.b=34.2;\x0d\x0aprintf("%5.1f,%c\n",mm.b,mm.d);\x0d\x0a}\x0d\x0a运行程序输出为:\x0d\x0a6\x0d\x0a6 7.2\x0d\x0a3 4.2,=\x0d\x0a程序最后一行的输出是我们无法预料的。其原因是连续做mm.d='W';mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。\x0d\x0a例子虽然很简单,但却说明了共用体变量的正确用法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式