共用体和结构体不同点:1,同一时刻,共用体中只存放一个被选中的成员,结构体的所有成员都存在,
2,对共用体的不同成员赋值,将会对其他成员重写,原来的值就不存在了,结构体不影响
共用体数据中所有成员占用相同的内存单元。关键字:union
示例代码:
- union stu{ //定义共用体
- char *name;
- int num;
- };
- void main(){
- union stu *p,stuone; //共用体指针,共用体变量
- p=&stuone; //共用体指针,指向共用体变量
- stuone.num=101; //赋值给共用体变量的num
- printf("%d\n",p->num); //用指针输出num的值
- }
- ---------------------------------------------------------------------------------------------------
- //共用体指针的强制类型转换
- union worker{ //定义共用体
- float salary;
- int number;
- };
- void main(){
- union worker *p, personone; //共用体指针,共用体变量
- p=&personone; //指针指向共用体变量
- *(float *)p=4567.0; //强制转换为 float类型的指针
- printf("\n%.2f\n",personone.salary);
- *(int *)p=112; //强制转换为int类型的指针
- printf("%d",personone.number);
- }
- ------------------------------------------------------------------------------------------------------
- //共用体变量的成员,共用体指针作为函数的参数传递
- union traffic{ //定义共用体
- char *name;
- int num;
- };
- void road(char *x){ //road()函数 传递char 类型指针
- printf("The name of traffic is %s!\n",x);
- }
- void air(union traffic *x){ //air()函数 传递共用体指针
- printf("The name of traffic is %s!\n",x->name);
- }
- void main(){
- union traffic *p,traone; //共用体指针,共用体变量
- p=&traone; //指针指向共用体变量
- traone.name="Car"; //为name赋值
- road(traone.name); //调用road()函数
- air(p); //调用air()函数
- }