C语言:关键字---union(声明共用体类型)

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587

C语言32个关键字
有32个关键字详细说明,还有跳转链接!

一、union 简介

union 是C语言中一种声明共用体的数据类型。
union(共用体)在某种程度上类似struct(结构体)的一种数据结构,可以包含很多数据结构和变量。
union(共用体)的特点:其内部的数据 共用一个内存首地址共享同一段内存,以达到节省空间的目的。
二、union 定义

1. 声明共用体类型

一般形式具体如下:
  1. union 共用体名
  2. {
  3.    //成员列表
  4.    数据类型 成员名;
  5.    数据类型 成员名;
  6.    ....
  7. }
复制代码
举例说明如下:
  1. union _MQ
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. };
复制代码
2. 定义共用体变量

一般形式具体如下:
  1. union _MQ
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. }; //定义共用体变量union _MQ mq;
复制代码
合并简化形式具体如下:
  1. union _MQ
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. }mq;
复制代码
匿名结构体形式具体如下:
  1. union
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. }mq;
复制代码
3. 使用 typedef 声明共用体类型,再定义共用体变量

一般形式如下:
  1. typedef union MQ
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. } _MQ;
  6. //定义共用体变量,以下两种效果一样
  7. union MQ mq;
  8. _MQ mq;
复制代码
匿名共用体形式具体如下:
  1. typedef union
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. } _MQ;
  6. //定义共用体变量
  7. _MQ mq;
复制代码
三、union 使用方法

共用体变量成员----赋值(.)

初始化定义时----赋值
  1. typedef union
  2. {
  3.         char data8[4];
  4.         int  data32;
  5. }_MQ;
  6. _MQ mq =
  7. {
  8.         .data32=0x12345678
  9. };
复制代码
初始化后----赋值
  1. mq.data32=0x12345678;
复制代码
union(共用体)----共用内存

  1. #include <stdio.h>
  2. typedef union
  3. {
  4.   char data8[4];
  5.   int  data32;
  6. }_MQ;
  7. _MQ mq =
  8. {
  9.   .data32=0x12345678
  10. };
  11. int main(int argc, char *argv[])
  12. {
  13.         printf("data[0]=0x%x\n",mq.data8[0]);
  14.         printf("data[1]=0x%x\n",mq.data8[1]);
  15.         printf("data[2]=0x%x\n",mq.data8[2]);
  16.         printf("data[3]=0x%x\n",mq.data8[3]);
  17.        
  18.         return 0;
  19. }
复制代码
运行结果如下:

四、union 占用的内存空间

union(共用体) 占用的内存空间,是由其中占用内存最大的成员变量决定的。
  1. #include <stdio.h>
  2. typedef union
  3. {
  4.         char data1;
  5.         int  data2;
  6.         float data3;
  7.         double data4;
  8. }_MQ;
  9. _MQ mq;
  10. int main(int argc, char *argv[])
  11. {
  12.         printf("data1占用的%d字节\n",sizeof(mq.data1));
  13.         printf("data2占用的%d字节\n",sizeof(mq.data2));
  14.         printf("data3占用的%d字节\n",sizeof(mq.data3));
  15.         printf("data4占用的%d字节\n",sizeof(mq.data4));
  16.     printf("共用体占用的%d字节\n",sizeof(mq));
  17.   return 0;
  18. }
复制代码
运行结果如下:

五、位结构和共用体联合使用

具体程序如下:
  1. #include <stdio.h>
  2. typedef union
  3. {
  4.         int  data;
  5.         struct
  6.         {
  7.                 int a:1;//第0位
  8.                 int b:2;//第1,2位
  9.                 int c:3;//第3,4,5位
  10.                 int d:4;//第6,7,8,9位
  11.                 int e:6;//第10,11,12,13,14,15位
  12.         }bit;
  13. }_MQ;
  14. _MQ mq=
  15. {
  16.    .bit.a = 1,
  17.    .bit.b = 3,
  18.    .bit.c = 6,
  19.    .bit.d = 10,
  20.    .bit.e = 26
  21. };
  22. int main(int argc, char *argv[])
  23. {
  24.         printf("data=0x%x\n",mq.data);
  25.         return 0;
  26. }
复制代码
运行结果如下:

解释说明:
变量15 14 13 12 11 109 8 7 65 4 32 10a(1)1b(3)11 (3)c(6)110 (6)d(10)1010 (10)e(26)011010 (26)结果是0b0110101010110111=0x6ab7

C语言:位结构体

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表