C语言中union属于用户定义数据类型还是派生数据类型?
C语言中union的类型归类界定
在C语言里,关于union(共用体)属于派生数据类型还是用户定义数据类型的分歧,本质是不同资料采用了不同的分类体系,核心判断应该以C语言官方标准(如C11、C17)为依据:
依据C标准的分类逻辑
C标准并未直接使用「用户定义数据类型」这一术语,而是将数据类型划分为三大类:
- 基本类型:包含字符类型、整数类型、浮点类型、布尔类型及空类型;
- 派生类型:由其他单一类型派生而来,包括指针类型、数组类型、函数类型;
- 复合自定义类型:结构体(
struct)、共用体(union)、枚举(enum)这类需要程序员自行定义成员结构的类型。这类类型不属于标准定义的「派生类型」,因为它们并非从某一个基础类型直接派生,而是由用户组合多种类型构造而成。
分歧的来源
- 部分资料将
union归为派生类型,是采用了广义的分类方式:把所有非基本类型都纳入派生类型范畴,或是沿用了早期教材、文档的分类习惯; - 另一些资料将
union归为用户定义类型,是聚焦于「类型结构由用户自主定义」这一核心特性——union必须由程序员声明成员、确定类型组合,因此属于用户自定义的范畴。
总结
严格遵循C标准的话,union不属于标准定义的派生数据类型,而是用户自定义的复合类型;但如果采用广义的非基本类型分类,部分资料会将其划入派生类型。实际学习中,重点应放在理解union的内存重叠、共用存储空间等核心特性,而非纠结分类名称的差异。
内容的提问来源于stack exchange,提问作者Anine Hartog
相关产品推荐
相关产品推荐

