共用体

结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。

共用体变量所占的内存长度等于最长的成员变量的长度。例如,教程中定义的共用体Data各占20个字节(因为char str[20]变量占20个字节),而不是各占4+4+20=28个字节。

节省内存,有两个很长的数据结构,不会同时使用,比如一个表示老师,一个表示学生,如果要统计教师和学生的情况用结构体的话就有点浪费了!用结构体的话,只占用最长的那个数据结构所占用的空间,就足够了!

共用体应用场景

通信中的数据包会用到共用体:因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。

#include <stdio.h>
#include <string.h>

// 声明共用体
union Data
{
	int i;
	float f;
	char str[ 20 ];
};

int main()
{
	union Data data;

	data.i = 10;
	data.f = 10.2;
	strcpy(data.str, "C Programming");

        printf("i = %d \n", data.i);
	printf("f = %f \n", data.f);
	printf("str = %s \n", data.str);

	// 结束main函数
	return 0;
}        

在这里,我们可以看到共用体的 if 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 str 成员能够完好输出的原因。现在让我们再来看一个相同的实例,这次我们在同一时间只使用一个变量,这也演示了使用共用体的主要目的:

#include <stdio.h>
#include <string.h>

// 声明共用体
union Data
{
	int i;
	float f;
	char str[ 20 ];
};

int main()
{
	union Data data;

	data.i = 10;
	printf("i = %d \n", data.i);

	data.f = 10.2;
	printf("f = %f \n", data.f);

	strcpy(data.str, "C Programming");
	printf("str = %s \n", data.str);

	// 结束main函数
	return 0;
}

 

 

posted @ 2018-02-22 11:54  半生戎马,共话桑麻、  阅读(266)  评论(0)    收藏  举报
levels of contents