本文主要介绍了C语言中关键字union的定义和使用。这篇文章给大家讲的很详细,对大家的学习或者工作都有一定的参考价值。有需要的朋友可以参考一下。
:
目录
1.定义工会2。初始化联合
三。联合体变量的声明
四。联合体变量的分配和使用
动词(verb的缩写)结构、联合和差异
Union,中文名称为“union,common body”,在某种程度上类似于struct的一种数据结构。Union和struct也可以包含许多数据类型和变量。
但是在“联合”中,每个成员共享一个内存空间,一个联合变量的长度等于每个成员的最大长度。必须先定义联合体类型,然后才能使用它,变量声明可以定义为联合体类型。
在定义结构对象时,如果没有显式初始化,将采用一般的初始化规则:如果结构对象属于动态存储类型,其成员具有不确定的初始值。
另一方面,如果结构对象有一个静态存储周期,其非指针成员初始值为0,其指针成员初始值为空指针。
与结构成员3354不同,它们在结构中都有单独的内存位置,而联合成员共享相同的内存位置。也就是说,联合中的所有成员都从同一个内存地址开始。因此,可以定义具有许多成员的联合,但一次只能有一个成员包含一个值。让联合程序员方便地以不同的方式使用同一个内存位置。
一、定义联合(union)
Union的定义方式与结构相同,只是关键字struct改为union:
union[标签名]{成员声明列表};
以下示例定义了一个名为Data的联合类型,它有3个成员:I、X和str:
联合数据{ int I;双x;char string[16];};
这种类型的对象可以存储整数、浮点数或短字符串。
例如:
联合国家机器
{
char字符;
int数;
char * str
双倍exp
};
union只配置足够大的空间来容纳最大长度的数据成员。在上面的例子中,最大长度是double类型,所以状态机的空间大小就是double数据类型的大小。
在C #中,union成员的默认属性页是public。Union主要用于压缩空间。如果有些数据不能同时使用,可以使用union。
其次,初始化联合。
与结构类似,联邦对象由初始化列表初始化。然而,对于union,列表只有一个初始化器。
像结构一样,C99允许在初始化器中使用成员指示器来指示哪个成员被初始化。此外,如果初始化器没有成员指示符,它将与联合中的第一个成员相关联。具有自动存储类的联合对象也可以通过使用相同类型的现有对象来初始化。以下是一些初始化示例:
联合数据变量1={77},
var2={。str='Mary'},
var3=var1,
myData[100]={{。x=0.5},{1},var 2 };
如果没有指定初始化器,数组myData中的元素将隐式初始化为值0。
三。联合体变量的声明
关节变量的描述方式与结构变量相同,也有三种形式:
首先,先定义联合体类型,然后声明联合体变量;
第二,定义联合体类型,同时声明联合体变量;
第三,直接声明联合体(匿名定义联合体类型)。
以perdata类型为例,解释如下:
首先,先定义联合体类型,然后声明联合体变量。
联合perdata
{
int类;
char officiae[10];
};
union perdata a,b;/*解释A和B属于perdata类型*/
其次,定义联合体类型并声明联合体变量:
联合perdata
{
int类;
char office[10];
} a,b;
三、直接申报联合体(匿名定义联合体类型):
联盟
{
int类;
char office[10];
}a、b
解释后的变量A和B属于perdata类型。变量A和B的长度应该等于perdata的成员中最长的长度,也就是office数组的长度,总共10个字节。对于变量A和B,如果给定整数值,只使用2个字节,而对于字符数组,可以使用10个字节。
四。联合体变量的分配和使用
联合体变量的赋值和使用只能在变量的成员上进行。
联合变量的成员表示为:联合变量名称。成员名称。
例如,将描述为perdata类型的变量后,可以使用a.class、a.office
只有联合变量名不允许用于赋值或其他操作。也不允许初始化关节变量,赋值只能在程序中完成。
联合体变量一次只能给一个成员值。关节变量的值是关节变量的成员的值。
动词(verb的缩写)结构、联合和差异
1.结构和联合都由不同数据类型的成员组成,但在任何时候,只有一个选定的成员存储在联合中,而结构的所有成员都存在。
2。向联合的不同成员赋值时,其他成员将被覆盖,原始成员的值将不存在,而向结构的不同成员赋值不会对其产生影响。
对联合变量的赋值只能对变量的成员进行。一个关节变量一次只能赋给一个成员,关节变量的值是当前关节变量的成员值。
需要注意的是,这里所谓的共享并不是指多个成员同时加载到一个联合变量中,而是联合变量可以赋予任意成员值,但每次只能赋予一个值,新值会刷新旧值。
这就是本文关于C语言关键字union的定义和使用的全部内容。有关C语言union关键字的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。