C语言:例子解释,关于union
C语言中,union的使用与struct 的用法非常类似,主要区别在于union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。
具体的案例:
union StateMachine
{
char character;
int number;
char *str;
double exp;
};
一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是double 型态,所以StateMachine 的空间大小就是double 数据类型的大小。
union,即“联合”,是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。
1、我们利用C语言定义一个简单的Union共用体结构。
2、在这个结构中包含若干个属性,其中有Int、Char和Double型。
3、此时我们还能利用Typedef关键字,去重名Union共用体。
4、然后我们就能这里对Union公用体进行定义使用。
5、定义语句无论是在Main函数之外还是之内,我们都能这样对他定义。
6、其实他还有一种比较特殊的用法,我们可以直接利用Typedef重名后的d来直接定义Union共用体的用法。
7、所以说Union的用法非常简单,但是要注意与struct结构体之间有一个区分。
可能的值是266(小尾) 或 17432576 (32 位大尾序) 或 2561(16位大尾)
参考下面的代码
#include<stdio.h>
union {
int i;
char x[2];
}a;
int main(void)
{ char *p;
int i = 0;
a.x[0] = 10;
a.x[1] = 1;
printf("%d
",a.i);
printf("联合a共占 %d 个字节
",sizeof(a));
p = (char *)(&a);
for(i = 0; i < sizeof(a); ++i)
{
printf("0x%08X --------", p + i);
printf("%02X
", *(p+i));
}
return 0;
}
计算机对于int采用高位在后的存储方式,也就是int 的4个字节,第一个字节是最低位,第四个字节是最高位。
union的x 成员只是用了其中2个字节,就是第一个和第二个。当第一个付10,第二个付1的时候,对于int成员来说就是 1 * 256 + 10 (因为一个字节最大为FF即255,进位后为256),结果就是266.
这边需要注意的是你应该是在debug 模式下执行的,这时候为给a付初始值0,如果在release模式下,a不一定有初始值0,这时候因为第三位和第四位未知,所以输出也会未知。
union是联合的意思,也就是内部的变量是共用同一个存储空间的,以变量中存储空间最大的为整个union的占用空间。
这个union中i是int型的占用4个字节,char x[2]是两个字节,那么这个union就占用4个字节。
假设分别是byte3,byte2,byte1,byte0。
如果用a.x[0]操作的就是byte0(对应16进制数是0xa),用a.x[1]操作的就是byte1(对应16进制数是0x1),byte3,byte2都没有被赋值(在调试已经初始化为0)。
读取a.i 时,就是对byte3,byte2,byte1,byte0同时操作,组合成16进制数就是0x0000010a,也就是266.
union用法c语言
在C语言中,`union`是一种特殊的复合数据类型,它允许在相同的内存位置存储不同的数据类型。`union`的主要特点是其所有成员共享同一块内存空间,因此其大小至少足够存储其最大成员。使用`union`可以节省内存,但使用时需要小心,因为同时只能使用其中一个成员。`union`的定义方式类似于结构体(`struct`)...
union用法c语言
\/\/ 这里仅为示例,实际使用时应避免这种混淆 strcpy(data.str, "Hello"); \/\/ 需要包含string.h头文件,且注意内存覆盖问题 printf("String: %s\\n", data.str);return 0;} ```注意,由于`union`成员共享内存,直接以不同数据类型访问同一块内存区域可能会导致数据解释错误或未定义行为,特别是当...
union的作用是什么
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。可以在最后一个结果集中指定Order by子句改变排序方式。例如:select employee_id,job_id from employees union select employee_id,job_id from job_history 以上将两个表的结果联合在一起。这两个例子会将两个select语句的结果中...
C语言中结构体struct与联合体union
在C语言中,结构体struct和联合体union是两种独特的数据组织方式,它们各具特色并适用于不同的场景。首先,结构体就像一个容器,可以包含不同类型的成员,每个成员有自己的内存空间,结构体的大小等于所有成员大小之和。例如,定义一个包含int、DATE(假设为int数组)和double的结构体,内存占用会根据所有...
c语言 union 所占内存大小问题
联合体(union)当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union);1)联合体是一个结构;2)它的所有成员相对于基地址的偏移量都为0;3)此结构空间要大到足够容纳最"宽"的成员;4)其对齐方式要适合其中所有的成员;下面举例说明:如联合体 1 union U 2 { 3 char s[9...
c语言,union有什么用?
union { int i;char c;}test;test.c = 2;return test.i != 2;} 这里用的是union来控制这个共享布局,有个知识点就是union里面的成员c和i都是从低地址开始对齐的。同样可以得到如此结果,而且不用转换,清晰一些。什么,不觉得清晰??那再看下面的例子:(2). 将little endian下的long...
C语言union 和struct,什么时候用union比struct更好,解释就可以了
对于一个union类型的变量,所有成员变量共享一块内存,该内存的大小有这些成员变量中长度最大的一个来决定 union分配的内存是连续的。那为什么要发明union呢?这是由于union的特性决定的,因为struct中成员变量虽然内存都是独立的,但是struct不能保证分配的内存是连续的。举个例子:CPU的ax寄存器分为ah和al...
C语言中联合的主要作用是什么
正如一楼所说,联合(union)用得很少。是这样的:几个不同数据类型共用同一段内存的结构,称为联合。举个例子:union { int i;char ch;float f;} 这个联合结构有三个元素对吧,一般来说不同的变量存在不同的内存,但联合中的这三个变量就存在同一段内存,只是在固定的某时刻,这个内存中只有这...
c语言 union 意思?
union的意思是协会。这些名词均有“社团,会社,协会”之意。club表俱乐部或会社,其成员因志同道合,有共同兴趣、爱好而组织到一起进行社交、娱乐或体育等活动。association指较为正式的组织,强调兴趣和需要的一致性。institute指为专门的目标而建立的学会或研究所。league指为了共同的目的和利益而组成的...
union是什么意思中文?
在SQL语言中,union是将两个或更多个select语句的结果合并成一个结果集的关键字。Union操作可以将两个或多个表中的数据合并成一个表,并通过查找表与表之间的关系来提供更好的查询结果。在编程中,union也可以被用于合并不同的数据类型或集合。这种技术在软件开发和数据科学等领域中得到了广泛的应用。