Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74974
  • 博文数量: 26
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-19 08:55
文章分类

全部博文(26)

文章存档

2011年(1)

2009年(10)

2008年(15)

我的朋友
最近访客

分类: C/C++

2008-10-03 21:29:19

共用体
定义:允许不同类型的数据使用同一段内存,即让不同类型的变量存放在起始地址相同的内存中。
(1)共用体类型定义
共用体类型定义的形式与结构体非常类似,其一段定义格式如下:
    union    类型标识符
    {
        共用体成员表
    };
(2)共用体变量的定义
共用体类型定义后就可定义该类型的变量,其变量的定义和结构体变量的定义一样,有三种形式
    注意 :不能在定义共用体类型变量是对其进行初始化。
(3)共用体变量的引用
共用体变量引用的一般形式为:
    共用体变量.成员名
例如:
    union u
    {
        char a[4];
        int i;
        long l;
    }
    struct s
    {
        int c;
        union U u;
    }m;
试分析变量m所占的内存字节数
解析如下:
    结构体所占的内存字节数等于各个成员所占的字节数的总和,而共用体变量所占内存字节数是其中最长的成员所需要的字节数。而本例中的结构体中的变量m有两个成员,一个是整形变量c,它占两个字节,另一个是共用体变量u,它自己有三个成员,其中内存字节最长的成员变量1占四个字节,因此u所占的字节书为4。结构体变量m所占字节书为2+4=6.
例2:
    union mynu
    {
        struct {int x ,y, z;}u;
        int k;
    }a;
    int main()
    {
        a.u.x=4;
        a.u.y=5;
        a.u.z=6;
        a.k=0;
        printf("%d\n",a.u.x);
    }
解析:
    本例中共用体类型mynu有两个成员:结构体成员u和整形成员k。结构体中有三个整形成员x、y、z,占用不同的存储空间。变量a.u.x与a.k首地址相同,根据共用体的赋值规则,a.k将覆盖a.u.x的值,因此输出a.u.x的值应该为a.k的值,即输出为0。

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