C语言联合体Unions实例代码教程 - 联合是一种特殊的数据类型在C语言中,使您可以存储不同的数据类型相同的内存位置。
联合是一种特殊的数据类型在C语言中,使您可以存储不同的数据类型相同的内存位置。您可以定义一个工会的许多成员,但在任何给定时间只有一个成员都可以包含一个值。工会提供了一个有效的方式使用相同的内存位置的多用途。
定义联合体
要定义一个工会,你必须使用UNION语句非常相似的是,像你一样在定义结构。 UNION语句定义了一个新的数据类型,与一个以上的成员为你的程序。 UNION语句的格式如下:
union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];
联合标记是可选的,每个成员的定义是一个普通的变量定义,如int;或浮动f;或任何其他有效的变量定义。在联盟的定义,之前的最后一个分号,你可以指定一个或多个工会变量,但它是可选的。这里是您将定义一个名为Data的联合类型,其中有三名成员,F,和str的方式:
union Data
{
int i;
float f;
char str[20];
} data;
现在,一个变量的数据类型可以存储一个整数,浮点数,字符串的字符。这意味着,一个变量,即。存储多种类型的数据,可以使用相同的内存位置。您可以使用任何内置或用户定义的数据类型在一个工会根据您的需求。
占用的内存由工会将大到足以容纳最大的工会会员。例如,在上面的例子中的数据类型将占用20个字节的存储空间,因为这是最大的空间,它可以占用字符串。下面的例子将显示所占用的内存大小由上述工会:
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
printf( "Memory size occupied by data : %d\n", sizeof(data));
return 0;
}
上面的代码编译和执行时,它会产生以下结果:
Memory size occupied by data : 20
访问联盟成员
要访问任何联合的成员,我们使用成员访问运算符(.)。被编码为一个周期工会之间的变量名和工会成员,我们希望访问的成员访问运算符。你会使用union关键字来定义联合类型的变量。以下是工会使用的例子来解释:
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
data.i = 10;
data.f = 220.5;
strcpy( data.str, "C Programming");
printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str);
return 0;
}
上面的代码编译和执行时,它会产生以下结果:
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming
在这里我们可以看到,i和f工会成员的值被损坏了,因为最后的值赋值给变量占用的内存位置,这是如果str的值成员要印出来不太清楚的原因。现在,让我们来看看同样的例子再次,在这里,我们将使用一个变量的时间,这是有工会的主要目的:
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
data.i = 10;
printf( "data.i : %d\n", data.i);
data.f = 220.5;
printf( "data.f : %f\n", data.f);
strcpy( data.str, "C Programming");
printf( "data.str : %s\n", data.str);
return 0;
}
上面的代码编译和执行时,它会产生以下结果:
data.i : 10
data.f : 220.500000
data.str : C Programming
在这里,所有的成员都印出来不太清楚,因为一名成员正在使用一次。
浅谈C语言中的联合体
http://www.cnblogs.com/dolphin0520/archive/2011/10/03/2198493.html