# 联合

联合是一种特殊的数据类型，它允许在同一内存位置存储不同类型的数据。联合的所有成员共享同一块内存空间，这意味着在任何给定时刻，联合体只能包含一个成员的值。

```c
#include <stdio.h>
#include <string.h>

union data
{
	int i;
	float f;
	char s[20];
};

int main(int argc, char const *argv[])
{
	union data u;
	u.i = 233;
	printf("%d\n", u.i);
	u.f = 6.66;
	printf("%d\n", u.i);
	printf("%f\n", u.f);
	strcpy(u.s, "Hello World!");
	printf("%d\n", u.i);
	printf("%f\n", u.f);
	printf("%s\n", u.s);
	return 0;
}
```

联合默认用其第一个成员类型的值进行初始化，或者使用指定初始化器来初始化特定的成员。

```c
#include <stdio.h>

union data
{
	int i;
	float f;
	char s[20];
};

int main(int argc, char const *argv[])
{
	union data u1 = {233};
	printf("%d\n", u1.i);
	printf("%f\n", u1.f);
	printf("%s\n", u1.s);
	union data u2 = {.f = 6.66};
	printf("%d\n", u2.i);
	printf("%f\n", u2.f);
	printf("%s\n", u2.s);
	union data u3 = {.s = "Hello World!"};
	printf("%d\n", u3.i);
	printf("%f\n", u3.f);
	printf("%s\n", u3.s);
	return 0;
}
```

