#include <stdio.h>
//共用体可以定义在函数外部或者内部,共用体名和变量至少有一种,如果有变量,可以进行初始化
union Data{
int i;
char ch;
double f;
};
union Data1{
int i;
char ch;
double f;
}w,*u;
union {
int i;
char ch;
double f;
}w1={234},*u1;
int main(){
union Data a;
//a=3; error 不可以直接用一个基本类型的数据对共用体变量赋值
a.i=3;
printf("%d\n",a.i);
a.ch='A';
printf("%c\n",a.ch);
a.f=3.14;
printf("%lf\n",a.f);
printf("%d,%c\n",a.i,a.ch); //输出垃圾直,因为共用体中所有成员使用的内存的开头地址值都是一样的,所以当我们对其中一个成员赋值的时候会覆盖掉原来的地址
union Data b={123}; //此种方式只能对这个共用体变量的第一个成员进行赋值
//union Data c={.f=4.5};//此种方式可以指定某一个成员进行赋值 这属于C99的功能,VC++未实现此功能
union Data d=b; //C99允许公用体变量可以相互赋值
//共用体变量的地址和长度必须被其最宽基本类型成员的大小所整除
//其总长度补习大于等于最宽成员的长度
//共用体变量的长度
union Data2{
char a[10];
int b;
}g;
printf("%d\n",sizeof(g));//必须4的倍数,然后还需要大于10,所以为12
return 0;
}
共用体可以定义在函数外部或者内部,共用体名和变量至少有一种,如果有变量,可以进行初始化
共用体变量的地址和长度必须被其最宽基本类型成员的大小所整除,其总长度补习大于等于最宽成员的长度