0%

C语言 解决存储的共用体

C语言的共用体union

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。

什么意思呢,就是在同一块内存存储可以定义多个数据类型,但是在使用的时候,只有一个变量有效。

这里就有一个问题,变量有大有小呀,对的,所以这个时候共用体的空间为内部变量最大占用空间的值。

如此这般,共用体就可以通过共享存储空间,来避免当前没有被使用的变量所造成的存储空间的浪费。

共用体的成员可以使用任何数据类型,但是一个共用体所占用的存储空间的字节总数,必须保证至少足以能够容纳其占用空间字节数最大的成员。并且共用体每次只允许访问一个成员,也就是一种数据类型,确保按照正确的数据类型来访问共用体中的数据,就是你的责任了。

先看看union的格式:

1
2
3
4
5
6
7
union [tag]
{
member definition;
member definition;
...
member definition;
} [variables];

其中:

  • union为类型变量;
  • tag为共用体的标记;
  • member definition为变量的定义;

举个例子:

1
2
3
4
5
6
7
union test
{
int i;
float f;
double d;
char str[20];
} data;

通过这个例子可以看到,这个结构体的大小是多少呢?可以通过程序来确认一下。

OK,这次我们来聊聊结构体。

任务来了,我想让你给学生建立一个数据库,该怎么来做。

这个学生包含的信息如下:

  • ID:也就是学号,唯一区别码,用整型表示
  • Name:姓名,用字符串表示
  • Age:年龄,用整型表示
  • Sex:性别,用字符串表示

按照目前学过的知识我们的代码如下,比如先来一个李雷同学的吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

union test
{
int i;
float f;
double d;
char str[20];
};

int main( )
{
union test data;

printf( "data size : %d\n", sizeof(data));

return 0;
}
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道