函数可以返回一个共用体变量吗?为什么?解释清楚点

函数可以返回一个共用体变量吗?为什么?解释清楚点,第1张

书上说不可以,我质疑了,我自己试了下,下面代码是正确的,我在VC++60和Cfree50运行都是正确,没有出现任何错误!!1

#include <stdioh>

union data

{

int i;

char c;

float f;

}a;

union data f1(int n)

{

union data dd;

ddi=n;

return dd;

}

union data f1(union data d)

{

union data dd;

ddi=di;

return dd;

}

int main()

{

int n=10;

union data d,qq,ss;

di=20;

qq=f1(d);

ss=f1(n);

printf("%d %f %d\n",qqi,qqf,qqc);

printf("%d %f %d\n",ssi,ssf,ssc);

return 0;

}

结构体(structure)是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型,而且每个成员的数据类型可以相同也可以不相同。共同体(union)将几种不同的变量储存在同一内存单元中,也就是使用覆盖技术,几个变量互相覆盖,这种几个不同的变量共同占用一段内存的结构,可见二者最大的区别就是所占用的内存,结构体(structure)所占用的内存是分量内存之和,共同体(union)所占用的内存是等于最大的分量的内存。

具体来说,结构体(structure)与共同体(union)主要有以下区别:

1结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成,

但在任何同一时刻,

共同体(union)中只存放了一个被选中的成员,

而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它们不能同时存在。共同体(union)变量的长度等于最长的成员的长度。

2

对于共同体(union)的不同成员赋值,

将会对其它成员重写,

原来成员的值就不存在了,

而对于结构体(structure)的不同成员赋值是互不影响的。

没人说不可以啊。但用起来有些麻烦,比如你把main中的sage=3;一句改成strcpy(sname,"test");应该是合法的吧?再看看你的代码会输出什么?要加#include "stringh"才能做此试验。

threebsp的union函数可以支持多个对象合并。在Source引擎中,threebsp的union函数可以支持将多个对象进行合并。具体来说,union函数是将多个实体对象合并成一个大的实体对象,以便于进行渲染。在进行合并时,但需要注意以下几点,合并的对象必须是实体对象,不能是世界几何体或精灵等其他类型的对象。合并的对象需要使用相同的材质,否则合并后的对象会出现材质错位或者无法渲染的问题。合并的对象需要在同一个空间中,否则合并后的对象会出现不合理的缝隙或重叠现象。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12172606.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存