C语言的联合(union)类型(27)

C语言的联合(union)类型:

union 联合名{
          数据类型 成员名;
          数据类型 成员名;
          ...
     } 联合变量名;
    联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量。

测试程序代码:

/************************************************************
 Copyright (C), 1998-2006, Rx. Co., Ltd.
 FileName: mainApp.cpp
 Author: longronglin
 Version : 1.0
 Date: 2006-10-06
 Description:      
 Function List:   
    1. int main()
 History:      
      <author> <time> <version > <desc>
      longronglin    2006/10/08     1.0      modify xxx . 
**********************************************************
*/


#include 
< stdio.h >


/*
 * 返回1为正确执行
 * 主函数
 *
 
*/


int  main()
{
    union
    
{
        
int i;
        
char x[2];
    }
 num;

    num.x[
0= 10
    num.x[
1= 1;

    printf(
"%x  ",num.i);

    
return (1);
}
  

运行结果图:

 有些人说是010a。这是和数据类型的内存分配有关。我上面的测试是在VC下的测试。

同样的也有一段网上流传的程序,大家看看结果。并分析一下。


int main()
{
        union{                   /*定义一个联合*/
               int i;
               struct{             /*在联合中定义一个结构*/
                    char first;
                    char second;
               }half;
          }number;
          number.i=0x4241;         /*联合成员赋值*/
          printf("%c%c/n", number.half.first, number.half.second);
          number.half.first='a';   /*联合中结构成员赋值*/
          number.half.second='b';
          printf("%x/n", number.i);

 return (1);
}

答案: AB   (0x41对应'A',是低位;Ox42对应'B',是高位) 6261 (number.i和number.half共用一块地址空间)。为什么这里的前面没有cccc呢?大家看看。因为赋过值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值