结构体和共用体在概念与使用上有什么不同?

 我来答
泠月冰辰
推荐于2017-09-13 · TA获得超过981个赞
知道小有建树答主
回答量:1149
采纳率:0%
帮助的人:820万
展开全部
简单的说:
结构体中每一个成员都有自己的内存空间。因此,结构体总大小一般情况下等于各成员大小之和(先不考虑内存对齐)。
共用体又叫联合体,每一个成员都共享内存空间。因此,共用体大小等于成员中最大的那个大小。

结构体我就不说了,它用处很广,最常见的是用它保存一个记录。例如,学生管理程序中,一个学生的信息。

共用体,我看见很少人会用,就不得不说说了,其实,共用体有很多妙用,用好了,会带来意想不到的效果。

如果光用共用体,那么实用性会减少很多,通常和结构体一起使用。
如下题目:
输入一个long,查看它的高位数和低位数。
一般人可能会去移位,但是,如果是用结构体共用体,那么这题根本就是小儿科。 完全可以赋值,输出就OK了。
解决这题可以设计这样的结构。
union uq1 {
long value; /*这就是输入的那个32位数*/
struct {
short lowbit; /*这是低位*/
short highbit; /*这是高位*/
} bit;
};

整个共用体还是4字节没有改变. 解决那题,就象这样:
uq1 u;
long v;
v=0x00FF00FF; /*就先假设输入的数是这个*/
u.value=v;
printf("high=%d,low=%d\n",u.bit.highbit,u.bit.lowbit);

这题的结果应该是:
high=255,low=255

怎么样这就把移位操作避免了..
老杜说收藏
2008-12-05 · TA获得超过527个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:0
展开全部
概念和功能很相似

只是共同体占用的空间要比结构体小一些 这与他们的原理有关

结构体占用的内存空间,是其元素,占空间的总和,而共用体是,元素中占用空间最大的元素的空间!所以共用体在空间开销上要小一点!

但是既然是两个不同的概念当然是不一样的 要不就没必要定义两个名词了

其实在共用体所用的内存中已经写入了数据!当使用其它元素时!上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用

结构体则不然, 每个成员都会有存储空间的,可以一起用.内部变量间是相互独立的,c中的结构体和C++里的类很相像~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式