C语言联合体

Posted seekwhale13

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言联合体相关的知识,希望对你有一定的参考价值。

参考https://bbs.huaweicloud.com/blogs/391571
联合体,又叫共用体,是由程序员自己设定的一种自定义数据类型。和结构体一样,联合体也拥有许多成员变量,不过其所有的成员变量占用空间的地址都相同,即所有成员使用同一份空间。
联合体(union)与结构体(struct)的区别:
结构体中每个成员都有自己独立的存储空间,互不干扰;联合体恰恰相反,所有成员共用一段存储空间,大小以其中占据最大空间成员为准,在单片机的使用中可用来查询一组IO中某个IO口的电平或者用来访问一组数据中某一个位或几个位的具体数值。

#include <stdio.h>

typedef unsigned char uchar;

typedef union

	uchar BYTE;
	struct
	
		uchar bit0 : 1;
		uchar bit1 : 1;
		uchar bit2 : 1;
		uchar bit3 : 1;
		uchar bit4 : 1;
		uchar bit5 : 1;
		uchar bit6 : 1;
		uchar bit7 : 1;
	BITTYPE;
unType;

void main()

	unType Key_flag;
	Key_flag.BYTE = 0x0F;
	printf("first num is %d\\n", Key_flag.BYTE);
	printf("first num is %d", Key_flag.BITTYPE.bit0);


运行结果:由于PC机上使用的是X86结构的 CPU,它是小端模式51单片机是大端模式很多ARM、DSP 也是小端模式(部分 ARM 处理器还可以由硬件来选择是大端模式还是小端模式),我们使用的stm32是小端模式,即低位地址存储低位数据。

first num is 15
first num is 1


也可应用:

typedef union

	uchar BYTE;
	struct
	
		uchar bit0:1;
		uchar bit1:1;
		uchar bit2:1;
		uchar bit3:1;
		uchar bit4:1;
		uchar bit5:1;
		uchar bit6:1;
		uchar bit7:1;	
	BITTYPE;	
unType;

以上是关于C语言联合体的主要内容,如果未能解决你的问题,请参考以下文章

C语言干货分享 | C语言的联合体

C语言中关于联合体中成员变量的问题

《C语言杂记》C语言结构体和联合体详解

C语言 | 联合体详解

C语言联合体

C语言—联合体/共用体