十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
正如一楼所说,联合(union)用得很少。是这样的:几个不同数据类型共用同一段内存的结构,称为联合。举个例子:
目前创新互联已为成百上千的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、宁明网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
union
{
int i;
char ch;
float f;
}
这个联合结构有三个元素对吧,一般来说不同的变量存在不同的内存,但联合中的这三个变量就存在同一段内存,只是在固定的某时刻,这个内存中只有这三个元素的其中一个元素存在,说到底是省了内存空间,比如,这个联合结构,就只占(sizeof(float))8个字节,就是元素中占最大空间的元素所占空间的大小。而你看结构体(struct)
struct
{
int i;
char ch;
float f;
}
他占的空间大小就应该是三个元素所占空间的总和(sizeof(int)+sizeof(char)+sizeof(float));基本就是这样了,不知道你明白没
C语言中,union的使用与struct 的用法非常类似,主要区别在于union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。
具体的案例:
union StateMachine
{
char character;
int number;
char *str;
double exp;
};
一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是double 型态,所以StateMachine 的空间大小就是double 数据类型的大小。
union,即“联合”,是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。
联合体又被称为共用体,我个人感觉,共用体名字更合理。
和结构体同属于C语言数据类型中的结构类型。
例如
uniuon data{ int i ; char c ;float f;}x;定义共用体类型名称为data类型,有三个属性,分别为
int i ; char c ;float f;这三个属性共同占用内存空间,所以空间占用选属性中占用最多的那个,也就是float f。占用四个字节。由于共同占用,所以在同一时间只能保留一个属性内容
如果为
struct data{ int i ; char c ;float f;}x;则表明定义结构体类型名称为data类型,也是三个属性,不过在内存中占用的是空间大小是三个属性之和。若int类型在编译器中分配4字节的话,总共分配字节数位4+1+4总共9字节。
由于单独占用,所以在同一时间可以保留所有属性内容
首先union不是函数,是类型。
这个union一共4个字节,首先给它赋值 i[0] = 0x39,然后给 i[1] = 0x38
因此整段内存就被赋值了 0x39 0x00 0x38 0x00,数组c从0到3分别就是这几个,因此c[0]就是0x39
k 自然就是0x00380039