複合型別

在计算机科学中，复合类型是一种数据类型，它可以原始类型和其它的复合类型所构成。构成一个复合类型的动作，又称作组合。

C/C++

struct是 C 和 C++ 的复合类型概念，是一个将字段或成员以一定组合方式所组成的数据类型。因为在宣告时，使用了关键字struct，所以它简称为结构，或者更精确地说用户定义的数据结构。
在 C++ 里，struct 与class的唯一区别是默认的访问档次，class是私有的，struct 则是公有的。
注意尽管类的概念和关键字class是C++新引入的，C语言也已具备粗糙的struct 类型。对于所有的意图和目的， C++ 的struct是 C struct 的超集：几乎所有合法的C struct 也是合法的C++ struct，并有着相同的语义。
struct 宣告组成一个字段清单，其中的每一个可以是任意类型。对于 struct 对象所需的存储区，即为全部字段的总合，再加上内部的补白。
例如：
 struct Account {
    int account_number;
    char *first_name;
    char *last_name;
    float balance;
 };
定义一个称为struct Account 的类型。若要创建此类型的新变量，可以写为struct Account myAccount;，它有一个以myAccount.account_number 访问的整数组件，且有一个以myAccount.balance 访问的浮点数组件，以及 first_name 和 last_name 组件。myAccount 包含这四个数值，且这四个字段可各自改变。由于 struct account 的写法有些累赘，在 C 代码中，typedef 语句并不罕见，其为struct 提供一个更简便的同义词。例如：
 typedef struct Account_ {
    int    account_number;
    char   *first_name;
    char   *last_name;
    float  balance;
 } Account;
在 C++ 中，并不需要typedef，因为使用了struct 的类型定义，已是名字空间的一部分，所以该类型可称作struct Account 或较简单的Account。
其它例子，一个使用了浮点数数据类型的三维向量复合类型，可如此建立：
 struct Vector {
   float x;
   float y;
   float z;
 };
一个以Vector 复合类型为类型的变量名velocity，可以宣告为Vector velocity;，可以用点运算符(.)访问 velocity 的成员。例如，velocity.x = 5;，会使velocity 的组件x 等于 5。
同样地，一个颜色结构可如此建立：
 struct Color {
   int red;
   int green;
   int blue;
 };
在三维图像中，必须经常不断追踪每一个顶点的位置和颜色。可以使用之前所创建的Vector 和 Color 复合类型来创建Vertex 复合类型：
 struct Vertex {
   Vector position;
   Color color;
 };
以同样的格式创建一个Vertex 类型的变量：Vertex v;，并以如下方式指派数值给v ：
   v.position.x = 0.0;
   v.position.y = 1.5;
   v.position.z = 0.0;
   v.color.red = 128;
   v.color.green = 0;
   v.color.blue = 255;

原始子类型检查

刚开始使用的struct，是用来建构组合数据类型，不过有时它是用来避开标准C 协议，以创建原始子类型检查（primitive subtyping）。例如，共同的网络协议依赖于以下事实，C 编译器以可预料的方法，在结构字段之间补白；因此代码
 struct ifoo_old_stub {
    long x, y;
 };
 struct ifoo_version_42 {
    long x, y, z;
    char *name;
    long a, b, c;
 };
 void operate_on_ifoo(struct ifoo_old_stub *);
 struct ifoo_version_42 s;
 . . .
 operate_on_ifoo(&s);
将可正确运作。