主要区别
结构和联合都是用户定义的数据类型,包含不同数据类型的变量。它们在定义、声明变量和检索成员时都有相同的语法。结构和联合仍然有许多不同之处。在结构上,每个成员在内存中都有独立的空间。在union中,分配的总内存空间等于大小最大的成员。所有其他成员共享相同的内存空间。这是结构和联合的最大区别。
什么是结构(structure)?
结构使用其成员的所有内存。在结构上,我们可以接纳任何序列中的任何成员。
什么是联盟(union)?
联合使用最大成员的内存空间。在union中,我们只能访问最近存储其值的变量。
主要区别
- 在结构上,每个成员在内存中都有独立的空间。在union中,分配的总内存空间等于大小最大的成员。所有其他成员共享相同的内存空间。这是结构和联合的最大区别。
- 在结构上,我们可以接纳任何序列中的任何成员。而在union中,我们只能访问值最近被存储的那个变量。
- 所有成员都可以在声明结构变量时进行准备。声明union变量时只能初始化第一个成员。在上面的例子中,我们只能在声明变量时修改变量roll no。
- 在一个结构中,所有成员都得到分配的内存,并且成员的地址随着减速器从左到右的读取而增加。也就是说,一个结构的构件都是从结构底部的不同偏移开始的。对于联合编译器,为所有成员中最大的一个分配内存,并且在联合中,所有成员的基偏移量为零,容器足够大,可以容纳最宽的成员,并且对齐方式适用于联合中的所有类型。
- 在一个结构中,所有成员都被分配了内存,因此任何成员都可以在任何时候被检索。从联合检索数据时,要检索的类型必须是最近存储的类型。
- 一个结构的一个或多个成员可以一次初始化。联合只能用其第一个成员类型的值初始化;因此,上面描述的联合u(在示例声明期间)只能用整数值初始化。
- 存储结构变量的内存量前提条件是所有成员的大小之和。另一方面,在联合的情况下,所需的内存量始终等于其最大成员所需的内存量。
- 对于union,您只能假设使用其中一个元素,因为它们都存储在同一个位置。这使它在您想要存储可能是几种类型之一的内容时非常有用。另一方面,一个结构的每个元素都有一个单独的内存位置,它们都可以一次使用。