结构和联合都是C语言中用户定义的数据类型,在概念上是相同的,但是,它们在某些方面仍然有所不同,例如将内存分配给其成员的方式。 它们的声明类似,但功能不同。 它们允许用户使用单个名称组合不同的数据类型。 声明结构变量时,每个成员使用单独的内存位置,而联合变量的不同成员共享相同的内存位置。
什么是结构?
结构体只是C语言中另一种用户定义的数据类型,它允许用户将不同类型的数据类型组合到一块内存中的单个类型中。一个结构可以包含彼此相关的简单数据类型和复杂数据类型,否则它们将毫无意义。结构中的每个成员都有其自己的内存位置,以便可以随时对其进行访问和检索。
当需要对大量数据进行分组时,可以使用一种结构,例如一个目录,该目录存储有关一本书中许多成员的信息,或者地址簿中存储有关单个联系人的所有信息,包括姓名,地址,联系电话等。每个成员的地址将按升序排列,这意味着每个成员的内存将从不同的偏移值开始。更改一个成员的价值不会对其他成员产生任何影响。
关键字“struct”用于在一个名称下定义不同数据类型的结构。例如,如果要创建员工数据库,则需要将员工的姓名,年龄,电话和薪水详细信息存储在单个实体下。这是通过关键字“struct”完成的,然后告诉编译器已经声明了一个结构。
struct employee{
string name;
string age;
string phone;
string salary;
} emp1, emp2;
在这里,“employee”是结构的名称,并且创建了两个类型为“employee”的变量“emp1”和“emp2”。 右括号后面必须用分号(;)。
结构的成员可以通过两种类型的运算符进行访问:
- 成员运算符
- 结构指针运算符
什么是联合体?
这是C语言中使用的一种特殊数据类型,它允许用户将不同类型的数据类型存储在同一内存位置。联合与结构非常相似,可以通过用关键字“union”替换关键字“struct”来定义。成员通过一个联合覆盖彼此的内存,并且足够大以容纳其所有成员。
当变量与联合相关联时,编译器会通过考虑最大内存的大小来分配内存,因此联合的大小等于最大数据成员的大小。可以用许多成员定义一个并集,但是在任何给定的时间实例中,只有一个成员包含该值。
联合的所有成员的地址都相同,每个成员都从相同的偏移值开始。并且更改一个成员的值将影响其他成员的值。当希望存储几种数据类型之一时,可以使用联合体。
union employee {
char name [32];
int age;
float salary;
};
这里的关键字“union”定义了与结构声明非常相似的联合。 该变量可以存储一个字符串值(表示“雇员的姓名”),一个整数值(表示“雇员的年龄”)或一个浮点数(表示“雇员的薪水”)。
结构 | 联合 |
---|---|
Struct关键字用于定义结构。 | Union关键字用于定义联合。 |
成员不共享结构中的内存。 | 成员共享一个联合中的内存空间。 |
可以随时在结构中检索任何成员。 | 在一个联盟中一次只能访问一个成员。 |
一个结构的几个成员可以一次被初始化。 | 只有第一个成员可以初始化。 |
结构的大小等于每个成员的大小之和。 | 联合的大小等于最大成员的大小。 |
更改一个成员的值不会影响另一个成员的值。 | 一个成员的值更改将影响其他成员的值。 |
为所有成员存储不同的值。 | 为所有成员存储相同的值。 |
总结
- 结构和联合都是C语言中用户定义的数据类型,它们在功能和概念上都相同,但在某些方面却大不相同。
- 两者都包含不同数据类型的变量,但是它们使用相同的语法来声明变量和访问成员。虽然结构是由关键字“struct”定义的,但联合则由关键字“union”定义的。
- 每个成员在结构中获得单独的内存位置,而在联合中,总内存空间等于最大内存的成员。 所有成员在一个联合中共享相同的内存空间。
- 可以在结构中访问任何顺序的任何成员,而在联合中,只能访问其值最近被存储的变量。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:结构体与联合体
本文链接:https://www.vsdiffer.com/vs/structure-vs-union.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。