C语言共用体Union
2021-02-09 本文已影响0人
YanZi_33
共用体是一种特殊的数据类型,允许你在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。
共用体Union的定义
union 共用体名
{
成员列表
};
union Data
{
int a;
float b;
char str[20];
};
- 定义了一个Data类型的共用体,包含三个不同类型的数据成员;
共用体Union变量的声明
- 直接在共用体定义声明的末尾添加一个变量名,不过这个共用体变量是全局的。
union Data
{
int a;
float b;
char str[20];
}data;
上面声明了一个共用体变量data;是一个全局的共用体变量。
- 直接在共用体类型后面 加上变量名,声明的共用体变量是局部的。
union Data
{
int a;
float b;
char str[20];
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
//共用体变量data1
union Data data1;
//共用体变量data2
union Data data2;
}
return 0;
}
共用体Union变量的初始化
- 先声明共用体变量,然后再进行初始化.
union Data
{
int a;
float b;
char str[20];
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
union Data data2;
data2.a = 10;
data2.b = 12.3f;
strcpy(data2.str,"liyanyan");
}
return 0;
}
共用体Union变量访问数据成员
结构体变量名.成员名
int main(int argc, const char * argv[]) {
@autoreleasepool {
union Data data2;
data2.a = 10;
data2.b = 12.3f;
strcpy(data2.str,"liyanyan");
printf(" a = %d",data2.a);
printf(" b = %f",data2.b);
printf(" str = %s",data2.str);
}
return 0;
}
共用体Union变量的内存大小
-
上面Data类型的共用体变量data2可以存储一个整数、一个浮点数,或者一个字符串。这意味着一个data2(相同的内存位置)可以存储以上三种类型的数据;注意是相同的内存位置;也就是说在同一时刻只有一种类型的数据才能访问到。
-
共用体变量的内存大小是数据成员中所占内存最大的那个数据成员的内存大小。
union Data
{
int a;
float b;
char str[3];
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
union Data data2;
data2.a = 10;
data2.b = 12.3f;
strcpy(data2.str,"li");
NSLog(@" size = %lu",sizeof(data2)); //size = 4
}
return 0;
}
上面的共用体变量data2所占内存大小为4个字节,最大的数据成员为float b.
union Data
{
int a;
float b;
char str[20];
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
union Data data2;
data2.a = 10;
data2.b = 12.3f;
strcpy(data2.str,"li");
NSLog(@" size = %lu",sizeof(data2)); //size = 20
}
return 0;
}
上面的共用体变量data2所占内存大小为20个字节,最大的数据成员为char str[20].
共用体Union变量所占内存
联合体是由不同的数据类型组成,但其变量是互斥的,所有的成员共占一段内存。而且共用体采用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会将原来成员的值覆盖掉。
缺点:包容性弱
优点:所有成员共用一段内存,使内存的使用更为精细灵活,同时也节省了内存空间。