栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

初始化后----赋值

mq.data32=0x12345678;
union(共用体)----共用内存
#include 

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

_MQ mq =
{
  .data32=0x12345678 
};

int main(int argc, char *argv[])
{
	printf("data[0]=0x%xn",mq.data8[0]);
	printf("data[1]=0x%xn",mq.data8[1]);
	printf("data[2]=0x%xn",mq.data8[2]);
	printf("data[3]=0x%xn",mq.data8[3]);
	
	return 0;
}

运行结果如下:

四、union 占用的内存空间

union(共用体) 占用的内存空间,是由其中占用内存最大的成员变量决定的。

#include 

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 

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%xn",mq.data);
	return 0;
}

运行结果如下:

解释说明:

变量15 14 13 12 11 109 8 7 65 4 32 10
a(1)1
b(3)11 (3)
c(6)110 (6)
d(10)1010 (10)
e(26)011010 (26)

结果是0b0110101010110111=0x6ab7


C语言:位结构体

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983109.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号