欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言共用体(联合体)union解析

程序员文章站 2022-07-11 18:53:01
...

定义一个联合体

typedef union score
	{
		int a;
		char b;
		double c;
		char d[10];

	}s1;

命名方法
1.typedef可以加可以不加加了就在“ }”后面写个名字算是小名或者定义完后再其他地方打个名字;
2.直接union 变量名{};
3union{ }变量名;
联合体所占空间
联合体所占的空间是以包含的最大的变量或者数组所占的字节
,比如我上面定义的就是char d[10];这个联合体占10个字节
存放顺序是按小到大的 0001 0002 0003 0004;
int 一般占四个字节 char 占1个字节 ,所以char这个字节是存放在0001 的 而int是0001到0004 这个使得定义的变量有被覆盖的可能
比如:

	s1 score;
	score.a = 3;
	score.b='s';
	
	
	printf("%d\n",score.a);
	printf("%c\n",score.c);
	system("pause");
}

C语言共用体(联合体)union解析
字符一般都会把数字覆盖同时如果要利用%d打印整型则会打印出字符的ASll码,无论是先赋值还是后赋值
如果是两个相同的类型的话则会是后赋值的被打印出来比如:

void main()
{
	typedef union score
	{
		int a;
		char b;
		double c;
		char d[10];
		int e;//新增定义一个e

	}s1;
	s1 score;
	score.a = 7;
	score.e=6;
	

C语言共用体(联合体)union解析
这时是e被打印出来
但是
C语言共用体(联合体)union解析
当交换位置时
C语言共用体(联合体)union解析
共用体相比数组和结构体等用相对没那么广泛 数据类型强制转换和单机片某些方面还是有着很方便的作用的。