C-共用体
2019-08-05 本文已影响0人
小石头呢
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。
您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。
一.定义共用体
为了定义共用体,您必须使用 union 语句,方式与定义结构体类似
union [union tag] {
member definition;
member definition;
...
member definition;
} [one or more union variables];
- union tag 是可选的,每个 member definition 是标准的变量定义
- 在共用体定义的末尾,,您可以指定一个或多个共用体变量,这是可选的
//定义一个名为 Data 的共用体类型
//有三个成员 i、f 和 str
union Data{
int i;
float f;
char str[20];
} data;
定义一个共用体变量和定义枚举和结构体变量类似,同样有三种方式
二.访问共用体成员
为了访问共用体的成员,我们使用成员访问运算符.
#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
所有的成员都能完好输出,因为同一时间只用到一个成员。
共用体的大小
共用体变量所占的内存长度等于最长的成员变量的长度
//共用体Data各占20个字节(因为char str[20]变量占20个字节)
//而不是各占4+4+20=28个字节
union Data{
int i;
float f;
char str[20];
} data;