C语言中联合和结构有什么区别

如题...多方面论证... 如题...多方面论证 展开
 我来答
匿名用户
2013-09-11
展开全部
前面对联合变量的定义和联合变量成员的表示以及对联合变量的赋值作了描述,可以看出联合与结构有许多相似之处,但是也指出了两者的最大区别在于联合是共址的,结构是异址的。即联合的所有成员共同使用一个内存地址,而结构的每个成员都有自己的内存地址。 由于联合的共址特性使得它与结构产生了很大差别。例如,在斌初值时,联合变量只能给第一个成员赋初值;不能对联合变量名赋值;不能用联合变量作函数参数,也不能用联合变量作函数的返回值,只能用指向联合变量的指针作函数参数。 下面举出两个例子说明联合变量的使用和特点。 [例9.1] 分析下列程序的输出结果,进而说明联合变量的成员是共址的。uninn data{char c_data;int i_data;float f_data;};main(){unian data dl;d1.c_data='a';dl.i_data=5;d1.f_data=3.7;printf ("%c\t%d\t%.2f\n",dl.c._data,dl.i_data,dl. f,data);printf("%d\n',sizeof(dl));printf(" %p\t%p\t%p\t%p\n",&dl.c_data,&dl.i_data,&dl.f.data,&dl);} 执行该程序输出结果如下:
? ? 3.7(?表示无意义)
4
FFD6 FFD6 FFD6 FFD6 说明: (1)该程序中,首先定义一个联合,其名为data,它有3个成员,分别是三种不同类型。又定义联合变量d3,并给它的三个成员分别赋值。当使用printf ( )函数输出dl的三个成员的值时,前两个成员输出值是无意义的,只有最后一个成员是有意义的,其值为3. 7.这说明:某一时刻一个联合变量中只有一个成员起作用,其他成员不起作用。 (2)输出,SizeoE(dl )的值为4,这说明联合变量d1占内存4个字节。在多个联合成员共占一个内存地址时,该地址所指向的内存空间是所有成员中占内存空间最大的成员所占的内存空间。该例中的三个成员所占内存字节数分别为1.2和4,最大的是4,因此,联合变量dl所占内存空间为4个字节。 (3)使用printf ( )函数分别输出联合变量dl的三个成员的内存地址都是相同的,并且与联合变量dl的地址值也是相同的,可见联合变量各成员是共址的。
上海华然企业咨询
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步... 点击进入详情页
本回答由上海华然企业咨询提供
fly1000fans
2018-04-05 · 超过27用户采纳过TA的回答
知道答主
回答量:67
采纳率:100%
帮助的人:36万
展开全部
举个栗子,给你4个字节的内存,一会让你存整形数,一会让你存字节数,你怎么定义这个类型?
union mytype
{
int a;

char b;
};
这个共用体或者叫联合中有两个变量,但是这两个变量使用的是同一块内存,你可以在内存中存任何数,在用 mytype.a访问的时候,它就是个整形;用mytype.b访问的时候,它就是个字符型。
结构体就简单了,所有内部变量独立内存空间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-11
展开全部
union 目的在于节省空间,占用空间为变量中占用空间最大的那个变量 struct 是各个变量空间的总和
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式