C语言32个关键字
有32个关键字详细说明,还有跳转链接!
一、union 简介
union 是C语言中一种声明共用体的数据类型。
union(共用体)在某种程度上类似struct(结构体)的一种数据结构,可以包含很多数据结构和变量。
union(共用体)的特点:其内部的数据 共用一个内存首地址,共享同一段内存,以达到节省空间的目的。
二、union 定义
1. 声明共用体类型
一般形式具体如下:
- union 共用体名
- {
- //成员列表
- 数据类型 成员名;
- 数据类型 成员名;
- ....
- }
复制代码 举例说明如下:
- union _MQ
- {
- char data8[4];
- int data32;
- };
复制代码 2. 定义共用体变量
一般形式具体如下:
- union _MQ
- {
- char data8[4];
- int data32;
- }; //定义共用体变量union _MQ mq;
复制代码 合并简化形式具体如下:
- union _MQ
- {
- char data8[4];
- int data32;
- }mq;
复制代码 匿名结构体形式具体如下:
- union
- {
- char data8[4];
- int data32;
- }mq;
复制代码 3. 使用 typedef 声明共用体类型,再定义共用体变量
一般形式如下:
- typedef union MQ
- {
- char data8[4];
- int data32;
- } _MQ;
- //定义共用体变量,以下两种效果一样
- union MQ mq;
- _MQ mq;
复制代码 匿名共用体形式具体如下:
- typedef union
- {
- char data8[4];
- int data32;
- } _MQ;
- //定义共用体变量
- _MQ mq;
复制代码 三、union 使用方法
共用体变量成员----赋值(.)
初始化定义时----赋值
- typedef union
- {
- char data8[4];
- int data32;
- }_MQ;
- _MQ mq =
- {
- .data32=0x12345678
- };
复制代码 初始化后----赋值
union(共用体)----共用内存
- #include <stdio.h>
- typedef union
- {
- char data8[4];
- int data32;
- }_MQ;
- _MQ mq =
- {
- .data32=0x12345678
- };
- int main(int argc, char *argv[])
- {
- printf("data[0]=0x%x\n",mq.data8[0]);
- printf("data[1]=0x%x\n",mq.data8[1]);
- printf("data[2]=0x%x\n",mq.data8[2]);
- printf("data[3]=0x%x\n",mq.data8[3]);
-
- return 0;
- }
复制代码 运行结果如下:

四、union 占用的内存空间
union(共用体) 占用的内存空间,是由其中占用内存最大的成员变量决定的。
- #include <stdio.h>
- typedef union
- {
- char data1;
- int data2;
- float data3;
- double data4;
- }_MQ;
- _MQ mq;
- int main(int argc, char *argv[])
- {
- printf("data1占用的%d字节\n",sizeof(mq.data1));
- printf("data2占用的%d字节\n",sizeof(mq.data2));
- printf("data3占用的%d字节\n",sizeof(mq.data3));
- printf("data4占用的%d字节\n",sizeof(mq.data4));
- printf("共用体占用的%d字节\n",sizeof(mq));
- return 0;
- }
复制代码 运行结果如下:

五、位结构和共用体联合使用
具体程序如下:
- #include <stdio.h>
- typedef union
- {
- int data;
- struct
- {
- int a:1;//第0位
- int b:2;//第1,2位
- int c:3;//第3,4,5位
- int d:4;//第6,7,8,9位
- int e:6;//第10,11,12,13,14,15位
- }bit;
- }_MQ;
- _MQ mq=
- {
- .bit.a = 1,
- .bit.b = 3,
- .bit.c = 6,
- .bit.d = 10,
- .bit.e = 26
- };
- int main(int argc, char *argv[])
- {
- printf("data=0x%x\n",mq.data);
- return 0;
- }
复制代码 运行结果如下:

解释说明:
变量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语言:位结构体
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |