共用体的使用

1.共用体变量的初始化

对于共用体变量,在定义的同时,可以初始化,但初始化只能对第一个成员初始化。如:

union data  d1={10};

2.共用体变量中成员的引用

与结构体变量成员引用的方式相同,也使用“->”和“.”两种运算符来实现:

共用体变量名.成员名

共用体指针变量名->成员名

如:union data d1, *pd;

pd=&d1;

对d1成员的引用可以是:d1.i    或   pd->i

                       d1.ch   或   pd->ch

                       d1.f    或   pd->f

同类型的共用体变量之间可以互相赋值。如:

   union  data  d1,d2={‘A’};

     d1=d2;

例9.5        分析下面程序运行结果。

   union data

{

int  i;

char  ch;

     float  f;

};

   struct data2

   {

    int  i;

char  ch;

  float  f;

};

  main (  )

  {

  union data  ud;

  struct data2  sd;

  ud.i=10; ud.ch= 'A'; ud.f=20;

  sd.i=10; sd.ch= 'A'; sd.f=20;

  printf(" size of  ud: %d, size of  sd: %d\n ",sizeof ud,  sizeof sd);

  printf("ud.i: %d, ud.ch: %c, ud.f: %f\n ",ud.i,ud.ch,ud.f);

  printf("sd.i: %d, sd.ch: %c, sd.f: %f\n ",sd.i,sd.ch,sd.f);

}

运行结果为:

  size of  ud: 4,size of  sd: 7

  ud.i: 0, ud.ch:  ,ud.f: 20.000000

sd.i: 10,sd.ch: A,sd.f: 20.000000

从上面的运行结果可看出,对共用体变量成员的赋值,保存的是最后的赋值,前面对其他成员的赋值均被覆盖;由于结构体变量的每个成员拥有不同的存储单元,因而不会出现这种情况。

本章小结

结构体类型是一种复杂而灵活的构造数据类型,它可以将多个相互关联但类型不同的数据项作为一个整体进行处理。在定义结构体变量时,每一个成员都要分配空间存放各自的数据。共用体是另一种构造数据类型,但在定义共用体变量时,只按占用空间最大的成员来分配空间,在同一时刻只能存放一个数据成员的值。本章重点:

1.  结构体和共用体变量的定义都有三种形式,可以将类型的说明和变量的定义分开、结合或不给出类型名只定义变量。

2.  结构体变量的初始化与赋值。结构体变量的初始化与数组相似,通过初值列表实现对变量中的成员初始化;赋值与数组也相似,只能逐个成员赋值。

3.  结构体变量中的成员作为一个整体处理,成员的访问通过运算符“.”和“->”实现,其方式为:

        结构体变量.成员名

        结构体指针变量->成员名

4.  共用体成员的访问方式与结构体相同,但只能对第一个成员初始化。当为一个成员赋值时,其他成员的值就会被覆盖掉。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值