书上说不可以,我质疑了,我自己试了下,下面代码是正确的,我在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函数是将多个实体对象合并成一个大的实体对象,以便于进行渲染。在进行合并时,但需要注意以下几点,合并的对象必须是实体对象,不能是世界几何体或精灵等其他类型的对象。合并的对象需要使用相同的材质,否则合并后的对象会出现材质错位或者无法渲染的问题。合并的对象需要在同一个空间中,否则合并后的对象会出现不合理的缝隙或重叠现象。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)