结构和联合的区别


来自:http://blog.chinaunix.net/uid-25132162-id-1565162.html
1、结构体的定义
   struct 结构体名
   {
       数据类型1 成员名1;
       数据类型2 成员名2;
       ......
   };
2、联合体的定义
   union 联合体名
   {
       数据类型1 成员名1;
       数据类型2 成员名2;
   };
3、两者之间的区别:
 (1)在同一时刻,结构体的每个成员都有值,但是联合体在同一时刻只有一个成员有值(或理解为结构体的sizeof是所有成员的和,而联合体的sizeof等于其最长的成员的sizeof);
 (2)当对结构体变量的其中一个成员进行修改时,对其他成员没有影响,但是修改联合体时,则会将原来的成员值覆盖。
例子:关于修改联合体的成员的值
  1. #include <iostream>
  2. using namespace std;

  3. int main() 
  4. { 
  5.     union test
  6.     {
  7.         int i;
  8.         struct 
  9.         {
  10.             char first;
  11.             char second;
  12.         }half;
  13.     }number;
  14.     number.= 0x4241;
  15.     cout<<number.half.first<<" "<<number.half.second<<endl;
  16.     number.half.first = 'a';
  17.     number.half.second = 'b';
  18.     printf("%x\n", number.i);

  19.     return 0; 
  20. }
输出结果为:
A B
6261
例二:
  1. #include <iostream>
  2. using namespace std;

  3. int main() 
  4. { 
  5.     union test
  6.     {
  7.         int i;
  8.         struct 
  9.         {
  10.             char first;
  11.             char second;
  12.         }half;
  13.     }number;
  14.     number.= 0x654241;  //注意与前面例子的区别
  15.     cout<<number.half.first<<" "<<number.half.second<<endl;
  16.     number.half.first = 'a';
  17.     number.half.second = 'b';
  18.     printf("%x\n", number.i);

  19.     return 0; 
  20. }

输出结果为:

A B
656261

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值