C语言中的联合
今天,我们讨论C编程列表中最高级的主题之一-Union。
了解C语言中的联合
" Union in C"是用户定义的数据类型,它使用户可以将不同类型的元素一起存储到其中。
我们可以其中定义各种数据成员/变量,但一次只能有一个数据变量占用联合中的内存。
因此,可以说联合的大小或者内存等于其中存在的最大数据成员的大小。
因此,所有数据变量在联合中共享相同的存储位置。
通过这种方式,Union提供了一种有效的方法,可以将相同数量的内存或者空间重新用于多个目的。
在介绍了基础知识之后,接下来定义一个联合。
如何在C中定义并集?
联合帮助我们定义存储不同数据类型值的数据变量,如下所示:
语法:
union union-name { data member1 definition ; data member2 definition; ... data memberN definition; }
关键字
union
用于声明联合结构。此外,"工会名称"是工会的名称,可以帮助我们在整个程序中访问工会。
我们可以在一个联合中定义不同数据类型的多个数据成员。
例:
union Info { int roll; float marks; char name[50]; } info_obj;
在上面的示例中,我们创建了一个联合" Info"并定义了不同数据类型的变量,例如int,float,char等。
Union使用相同的内存空间/大小来存储不同数据类型的值,从而增加了空间的可重用性。
联合的内存空间是其中声明的最大数据成员的大小。
在上面的示例中,最大的变量"名称"占用50个字节的空间。
因此,联合" Info"也将代表50个字节的存储空间。
创建联合变量
联合变量帮助联合类型根据最大的数据成员分配内存空间。
创建联合变量有两种方法:
方法1:
union union-name { data member1 definition ; data member2 definition; ... data memberN definition; } union_variable 1, union_variable2, .... , union_variableN;
方法2:
union union-name { data member1 definition ; data member2 definition; ... data memberN definition; }; int main() { union union-name union_variable 1, union_variable2, ... ,union_variableN; return 0; }
访问联盟数据成员
为了给联合类型中定义的数据成员赋值,我们需要使用联合变量来访问它们。
有两种访问联合数据成员的技术:
方法1:使用`(。
)运算符
union_variable.data_member = value;
方法2:使用"箭头(->)运算符"
union_variable->data_member = value;
让我们看下面的示例,以理解上面解释的概念。
#include<stdio.h> union Info { int roll; float marks; char name[100]; } info_obj; int main() { info_obj.roll = 1; info_obj.marks = 82.5; printf("Roll number : %d\n", info_obj.roll); printf("Marks obtained : %.1f", info_obj.marks); return 0; }
在下面的输出中,只有最后一个变量"标记"正确显示。
这是因为,您可以看到变量" info_obj"同时访问变量" marks"和" roll"。
由于内存位置是共享的,因此在输出期间仅最后一个值会保留内存。
先前声明的变量" roll"已损坏。
这可以证明我们有关Union数据类型共享内存位置的初始声明。
输出:
Roll number : 1118109696 Marks obtained : 82.5
看下面的例子看看有什么区别!
#include<stdio.h> union Info { int roll; float marks; char name[100]; } info_obj; int main() { info_obj.roll = 1; printf("Roll number : %d\n", info_obj.roll); info_obj.marks = 82.5; printf("Marks obtained : %.1f", info_obj.marks); return 0; }
现在,数据变量" roll"和" marks"都可以正确显示。
原因是,这里的联合变量" info_obj"一次访问一个变量并显示该值,然后继续获取另一个数据成员。
输出:
Roll number : 1 Marks obtained : 82.5
结构与联合之间的差异
考虑以下示例,以了解结构和联合之间的区别:
#include <stdio.h> union u_Info { int roll; float marks; char name[100]; } u_obj; struct s_Info { int roll; float marks; char name[100]; } s_obj; int main() { printf("Size -- Structure datatype = %d\n", sizeof(s_obj)); printf("Size -- Union datatype = %d", sizeof(u_obj)); return 0; }
Union占用其中存在的最大变量的存储空间。
其中变量"名称"具有100个字节的空间。
因此,并集的大小为100个字节。
另一方面,结构占用的内存大小是内存中所有数据成员大小的总和。
因此,结构表示108个字节的内存大小。
输出:
Size -- Structure datatype = 108 Size -- Union datatype = 100