联合体是什么?

union类型与struct类型类似,只是所有字段共享相同的内存位置。union的大小是它包含的最大字段的大小。
下面的代码中创建一个联合体类型,大小为4个字节。

union mix {
  char c;  /* 1 byte */
  short s; /* 2 bytes */
  int i;   /* 4 bytes */
};

由于内存是共享的,因此union类型一次只能存储一个值。更改一个字段将覆盖其他字段的值。

#include <stdio.h>
union mix {
  char c;  /* 1 byte */
  short s; /* 2 bytes */
  int i;   /* 4 bytes */
};

int main(void) {
  union mix m;

  printf(%d\n,m.c);
  printf(%d\n,m.s);

  m.c = 0xFF; /* set first 8 bits */

  printf(%d\n,m.c);
  printf(%d\n,m.s);


  m.s = 0;    /* reset first 16 bits */

  printf(%d\n,m.c);
  printf(%d\n,m.s);
}

union提供了多种使用相同内存位置的方法。

示例代码 :

#include <stdio.h>
union mix {//
  char c[4];                  /* 4 bytes */
  struct { short hi, lo; } s; /* 4 bytes */
  int i;                      /* 4 bytes */
} m;


int main(void) {
  union mix m;

    m.i=0xFF00F00F; //11111111 00000000 11110000 00001111
    m.s.lo;         //11111111 00000000                   
    m.s.hi;         //                  11110000 00001111 
    m.c[3];         //11111111                            
    m.c[2];         //         00000000                   
    m.c[1];         //                  11110000          
    m.c[0];         //                           00001111 

    printf(%d\n,m.i);
    printf(%d\n,m.s.lo);

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。