一、共同体作用
提供一种在相同内存位置存储不同数据类型的有效方式
二、共同体定义
union [union tag] //tag是可选参数
{
member definition;
member definition;
...
member definition;
} [one or more union variables]; // 共同体变量是可选的
三、共同体占用空间大小
#include <stdio.h>
union Data
{
int i;
float f;
char str[20];
} data;
int main()
{
printf("Memory size occupied by data : %d\n", sizeof(data));
return 0;
}
执行结果:
共同体占用空间大小是共同体中存储的最大成员的大小。
四、访问共同体成员(同一时间用到三个成员)
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
} data;
int main()
{
data.i = 10;
data.f = 22.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;
}
执行结果:
共用体的 i 和 f 成员的值有损坏,因为最后赋给变量的值占用了内存位置。
五、访问共同体成员(同一时间只用到一个成员)
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
} data;
int main()
{
data.i = 10;
printf( "data.i : %d\n", data.i);
data.f = 22.5;
printf( "data.f : %f\n", data.f);
strcpy(data.str,"C Programming");
printf( "data.str : %s\n", data.str);
return 0;
}
执行结果:
所有的成员都能完好输出,因为同一时间只用到一个成员 。