union 共用体 联合体

 共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
1. 共用体声明和共用体变量定义
其形式为:
  union 共用体名{
  数据类型 成员名;
  数据类型 成员名;
  ...
  } 变量名;
下例表示声明一个共用体foo:
  union foo{
  int i;
  char c;
  double k;
  };
  再用已声明的共用体可定义共用体变量。
  例如用上面说明的共用体定义一个名为bar的共用体变量, 可写成:
  union foo bar;
  在共用体变量bar中, 整型变量i和字符变量c共用同一内存位置。
  当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。以上例而言,最大长度是double数据类型,所以foo的内存空间就是double型的长度。
  union foo
  {
  char s[10];
  int i;
  };
  在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为double,则foo的内存空间为16,是double型的两倍。
   另外要注意的是,union的成员不可以为静态、引用,如果是自订型态的话,该自订型态成员不可以有建构函式、解构函式或是复制指定运算子。
 2. 共用体和结构体的区别
  共用体和结构体有下列区别:
  1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
  2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。


设有以下说明和定义:
 typedef union {long i; int k[5]; char c;} DATE;
 struct data { int cat; DATE cow; double dog;} too; 
DATE max;
 则语句 printf("%d",sizeof(too)+sizeof(max));
的执行结果是:______ 
答案:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20 data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52. 当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值