C语言基础:共用体

        共用体和结构体不同点:1,同一时刻,共用体中只存放一个被选中的成员,结构体的所有成员都存在,

                                                     2,对共用体的不同成员赋值,将会对其他成员重写,原来的值就不存在了,结构体不影响

共用体数据中所有成员占用相同的内存单元。关键字:union

示例代码:

  1. union stu{           //定义共用体
  2.     char *name;
  3.     int num; 
  4. };
  5. void main(){
  6.     union stu *p,stuone;       //共用体指针,共用体变量
  7.     p=&stuone;                     //共用体指针,指向共用体变量
  8.     stuone.num=101;           //赋值给共用体变量的num
  9.     printf("%d\n",p->num);  //用指针输出num的值
  10. }
  11. ---------------------------------------------------------------------------------------------------
  12. //共用体指针的强制类型转换
  13. union worker{             //定义共用体
  14.     float salary;
  15.     int number;
  16. };
  17. void main(){
  18.     union worker *p, personone;       //共用体指针,共用体变量
  19.     p=&personone;                            //指针指向共用体变量
  20.     *(float *)p=4567.0;                       //强制转换为 float类型的指针
  21.     printf("\n%.2f\n",personone.salary);
  22.     *(int *)p=112;                                //强制转换为int类型的指针
  23.     printf("%d",personone.number);
  24. }
  25. ------------------------------------------------------------------------------------------------------
  26. //共用体变量的成员,共用体指针作为函数的参数传递
  27. union traffic{           //定义共用体
  28.     char *name;
  29.     int num;
  30. };
  31. void road(char *x){              //road()函数 传递char 类型指针
  32.     printf("The name of traffic is %s!\n",x);
  33. }
  34. void air(union traffic *x){    //air()函数 传递共用体指针
  35.     printf("The name of traffic is %s!\n",x->name);
  36. }
  37. void main(){
  38.     union traffic *p,traone;      //共用体指针,共用体变量
  39.     p=&traone;                        //指针指向共用体变量
  40.     traone.name="Car";         //为name赋值 
  41.     road(traone.name);          //调用road()函数
  42.     air(p);                                //调用air()函数
  43. }
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值