复合类型
数据类型
计算机科学中,复合类型是一种数据类型,它可以原始类型和其它的复合类型所构成。构成一个复合类型的动作,又称作组合。
C/C++
主条目:C++类
struct是C和C++的复合类型概念,是一个将字段或成员以一定组合方式所组成的数据类型。因为在宣告时,使用了关键字struct,所以它简称为结构,或者更精确地说用户定义的数据结构。
在 C++ 里,struct与class的唯一区别是默认的访问档次,class是私有的,struct则是公有的。
注意尽管类的概念和关键字class是C++新引入的,C语言也已具备粗糙的struct类型。对于所有的意图和目的, C++ 的struct是 Cstruct的超集:几乎所有合法的 Cstruct也是合法的 C++struct,并有着相同的语义。
struct宣告组成一个字段清单,其中的每一个可以是任意类型。对于struct对象所需的存储区,即为全部字段的总合,再加上内部的补白。
例如:
定义一个称为struct Account的类型。若要创建此类型的新变量,可以写为struct Account myAccount;,它有一个以myAccount.account_number访问的整数组件,且有一个以myAccount.balance访问的浮点数组件,以及first_name和last_name组件。myAccount包含这四个数值,且这四个字段可各自改变。由于struct account的写法有些累赘,在 C 代码中,typedef语句并不罕见,其为struct提供一个更简便的同义词。例如:
在 C++ 中,并不需要typedef,因为使用了struct的类型定义,已是名字空间的一部分,所以该类型可称作struct Account或较简单的Account。
其它例子,一个使用了浮点数数据类型的三维向量复合类型,可如此创建:
一个以Vector复合类型为类型的变量名velocity,可以宣告为Vector velocity;,可以用点运算符(.)访问velocity的成员。例如,velocity.x = 5;,会使velocity的组件x等于 5。
同样地,一个颜色结构可如此创建:
原始子类型检查
刚开始使用的struct,是用来建构组合数据类型,不过有时它是用来避开标准 C 协议,以创建原始子类型检查(primitive subtyping)。例如,共同的网络协议依赖于以下事实,C 编译器以可预料的方法,在结构字段之间补白;因此代码
将可正确运作。
参考资料
最新修订时间:2022-08-25 16:25
目录
概述
C/C++
参考资料