数据对象概述

数据 对象 是包含值或值组的存储区域。 可以使用其标识或引用对象的更复杂的表达式来访问每个值。 此外,每个对象都具有唯一的 数据类型。 对象的数据类型确定该对象的存储分配以及在后续访问期间对值的解释。 它也用于任何类型的检查操作。 对象的标识和数据类型都在对象 声明中建立。

仅限 C + + 开始 一个类类型的实例通常称为类对象。 单个类成员也称为对象。仅限 C++ 结束

数据类型通常分组为重叠的类型类别,例如:
基本类型与派生类型
基本 数据类型也称为语言的 "基本" , "基本" 或 "内置"。 其中包括整数,浮点数和字符。 派生的 类型,也称为 C++ 中的 "复合" 类型, 是根据基本类型集创建的,包括数组,指针,结构,并集,枚举和向量所有 C++ 类都被视为复合类型。
内置类型与用户定义的类型
内置 数据类型包括所有基本类型,以及引用基本类型 (例如数组和指针) 的地址的类型。 用户定义的 类型由用户根据 typedef,结构,并集和枚举定义中的基本类型集创建。 C++ 类被视为用户定义的类型。
标量类型与聚集类型
Scalar 类型表示单个数据值,而 aggregate 类型表示同一类型或不同类型的多个值。 标量包括算术类型和指针。 聚集类型包括数组,结构和向量C++ 类被视为聚集类型。
以下矩阵列出了受支持的数据类型及其分类为基本类型,派生类型,标量类型和聚集类型。
表 1. C/CDb2 数据类型
数据对象 基本 复合 内置 用户定义 SCALAR 汇总
整数类型 + + +
浮点类型1 + + +
字符类型 + +
博莱兰人 + + +
空类型 +2 + +
指针 + + +
arrays + + +
结构 + + +
联合 + +
enumerations + + 请参阅注释3  
仅限 C + + + + +
IBM 扩展 矢量类型   +     +
注意:
  1. 虽然复杂浮点类型在内部表示为由两个元素组成的数组,但它们在对齐和算术运算方面的行为与实际浮点类型相同,因此可被视为标量类型。
  2. void 类型确实是不完整的类型,如 不完整类型中所述。 但是, C++ 标准将其定义为基本类型。
  3. C 仅开始 C标准不将枚举归类为标量或聚合。仅限 C 结束 仅限 C + + C++标准将枚举归类为标量。仅限 C++ 结束

不完全类型

以下是不完整的类型:
  • void 类型
  • 未知大小的数组
  • 类型不完整的元素数组
  • 没有定义的结构,并集或枚举
  • 仅限 C + + 指向已声明但未定义的类类型的指针
  • 仅限 C + + 已声明但未定义的类

但是,如果 [*]指定了数组大小 (指示可变长度数组) ,那么会将该大小视为已指定,然后将数组类型视为完整类型。 有关更多信息,请参阅 可变长度数组

以下示例说明了不完整的类型:
      void *incomplete_ptr;
      struct dimension linear; /* no previous definition of dimension */

兼容和组合类型

仅开始 C
在 C 中,兼容类型定义为:
  • 可以一起使用而无需修改的两种类型 (如在赋值表达式中)
  • 可以在不进行修改的情况下将两种类型替换为另一种类型

组合类型 由两种兼容类型构造。 确定两个兼容类型的结果组合类型类似于在与一些算术运算符组合时遵循整数类型的通常二进制转换。

显然,两种类型相同是兼容的; 它们的组合类型是同一类型。 不太明显的是管理不同类型,用户定义类型和类型限定类型等的类型兼容性的规则。 类型说明符 讨论 C 中基本类型和用户定义类型的兼容性。

结束 C

仅限 C + + C++中没有与同一类型不同的类型兼容性的单独概念。一般来说,C++中的类型检查比C中的更严格:在C中只需要兼容类型的情况下,C++中则需要相同类型。仅限 C++ 结束