联合体和结构体有何不同?
时间: 2024-06-19 12:02:38 浏览: 87
结构体和联合体都是在C语言和C++中的构造数据类型。相同之处在于它们都是将不同类型的数据组合成一个整体,形成自定义数据类型。不同之处在于联合体的各个成员共用一段内存空间,不同成员的赋值会互相影响,而结构体的各个成员占用不同的内存,互相之间没有影响。此外,结构体占用的内存大小通常大于等于所有成员的内存总和(因为成员之间可能存在内存间隙),而联合体占用的内存大小等于最大成员的大小。因此,联合体更加节省内存,但是使用时需要特别小心,以避免出现意外的结果。
以下是一个联合体的定义和使用示例:[^1]
```c
union Data {
int i;
float f;
char str[20];
} data;
data.i = 10;
printf( "data.i : %d\n", data.i);
data.f = 220.5;
printf( "data.f : %f\n", data.f);
strcpy( data.str, "Hello");
printf( "data.str : %s\n", data.str);
```
以上代码定义了一个联合体Data,其中包含了一个整型变量i、一个浮点型变量f和一个字符数组str。在代码中,我们可以通过修改不同的成员来改变联合体的值。例如,我们首先将整型变量i的值赋为10,然后通过printf函数输出i的值。接着,我们将浮点型变量f的值赋为220.5,再通过printf函数输出f的值。最后,我们将字符数组str的值修改为"Hello",并通过printf函数输出str的值。可以看到,输出结果分别为10、220.500000和Hello,这证明了联合体的各个成员确实共用一段内存空间。
阅读全文