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

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


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

1. 声明共用体类型

一般形式具体如下:

union 共用体名 {    //成员列表    数据类型 成员名;    数据类型 成员名;    .... } 

举例说明如下:

union _MQ { 	char data8[4]; 	int  data32; };  

一般形式具体如下:

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; 

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

初始化定义时----赋值

typedef union  { 	char data8[4]; 	int  data32; }_MQ;   _MQ mq = { 	.data32=0x12345678  }; 

初始化后----赋值

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; } 

运行结果如下:
C语言:关键字---union(声明共用体类型)

union(共用体)----判断系统大小端模式

我的电脑系统是小端模式

大端模式(高字节在前) 小端模式(低字节在前)
data32 data[0] data[1] data[2] data[3] data[0] data[1] data[2] data[3]
0x12345678 0x12 0x34 0x56 0x78 0x78 0x56 0x34 0x12

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; } 

运行结果如下:
C语言:关键字---union(声明共用体类型)

具体程序如下:

#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; } 

运行结果如下:
C语言:关键字---union(声明共用体类型)
解释说明:

变量 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
a(1) 1
b(3) 11 (3)
c(6) 110 (6)
d(10) 1010 (10)
e(26) 011010 (26)

结果是0b0110101010110111=0x6ab7


C语言:位结构体