Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492222
  • 博文数量: 130
  • 博客积分: 2111
  • 博客等级: 大尉
  • 技术积分: 1373
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-28 09:55
个人简介

IT民工

文章分类

全部博文(130)

文章存档

2021年(1)

2019年(1)

2017年(3)

2014年(1)

2013年(3)

2012年(2)

2011年(3)

2010年(2)

2009年(114)

分类: LINUX

2009-09-07 13:08:58

c语言:联合类型 union [zt]
2007-11-21 22:58:06

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:      
       
*/


#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呢?大家看看。因为赋过值。

阅读(720) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~