结构声明

“结构声明”称为 " 类型并指定可以具有不同类型的变量值的顺序 (称为 “成员”或 “字段”的机制)。一个选项标识符,称为 “标记”,为结构类型的名称,可用于以后对该结构的类型。该结构类型的变量到整个序列负定义的由该类型。framework 使用 C 类似于类型称为 “在其他语言记录”。

语法

  • 结构或联合说明符:
    结构或联合标识符opt**{** 结构声明列表 }

    结构或联合标识符

  • 结构或联合:
    struct

    union

  • 结构声明列表:
    结构声明

    结构声明列表结构声明

framework 目录中定义。

  • 结构声明:
    说明符限定符列表结构公告列表 ;

  • 说明符限定符列表:
    类型说明符说明符限定符列表 opt

    类型限定符说明符限定符列表 opt

  • 结构公告列表:
    结构声明

    结构公告列表 结构声明

  • 结构声明:
    declarator

结构类型中声明为结构不留出空间。它是结构变量的最新声明的一个模板。

以前已定义的 标识符 来引用在其他位置定义的结构类型。在这种情况下,,只要该定义可见, 请结构声明列表 不能重复。,结构类型定义之前,指针和 typedef 的声明指向结构的结构类型的能使用结构标记。但是,必须在对字段范围内的任何实际使用之前遇到结构定义。这是类型和类型标记的不完全定义。可以将完成此定义的,类型定义以后必须出现在同一范围。

结构声明中 指定结构成员的类型和名称。结构声明参数 列表包含一个或多个变量或位域声明。

每个声明的变量 结构声明列表 定义为结构类型的成员。中的变量声明 结构声明列表 包含窗体和本节中讨论的其他变量声明相同,不同之处在于,声明不能包含存储类说明符或初始值设定项。结构成员可以具有不同类型 void,一个不完整类型或函数类型的任何变量的类型。

成员不能声明具有显示结构的类型。但是,成员可声明为指针为类似的结构输入,只要 framework 类型都有一个标记。这允许您创建连接表结构。

结构效仿范围和其他标识符相同。结构标识符必须是不同其他结构、联合和枚举标记具有相同的可见性。

结构声明列表的 每个 结构声明 必须是唯一的列表中。但是,在 结构声明中列出的 标识符名称不必与不同普通的变量名或在其他框架的标识符列表的说明。

嵌套结构也可以访问,则声明在文件范围级别。例如命名此声明:

struct a
{
    int x;
    struct b
    {
      int y;
    } var2;
} var1;

这些声明都是合法的:

struct a var3;
struct b var4;

示例

这些示例阐释了结构声明:

struct employee   /* Defines a structure variable named temp */
{
    char name[20];
    int id;
    long class;
} temp;

employee 结构具有三个成员: name、 id和 class。name 成员是 20 元素数组,因此, id 和 class 分别为具有 int 和 long 类型的简单的成员,。该标识符 employee 是结构标识符。

struct employee student, faculty, staff;

此示例定义了三个结构变量: student、 faculty和 staff。每个结构具有相同的列表三个成员。成员声明具有结构类型 employee,定义在前面的示例中。

struct           /* Defines an anonymous struct and a */
{                /* structure variable named complex  */
    float x, y;
} complex;

complex 结构具有 float 类型、 x 和 y的成员。因此 framework 类型没有标记为未命名或匿名的。

struct sample   /* Defines a structure named x */
{
    char c;
    float *pf;
    struct sample *next;
} x;

结构的前两个成员是 char 变量和指向 float 值。第三个成员, next,声明为指向定义的结构类型 (sample)。

,在名为的标记不在需要时,匿名结构很有用。,在一个声明定义所有结构实例时,这种情况。例如:

struct
{
    int x;
    int y;
} mystruct;

嵌入结构通常是匿名的。

struct somestruct
{
    struct    /* Anonymous structure */
    {
        int x, y;
    } point;
    int type;
} w;

Microsoft 专用

编译器允许一个未确定大小或零大小的数组作为结构的最后一个成员。这非常有用,如果常数数组的大小不同,当使用各种情况。这种结构的声明如下所示:

struct 标识符**{**    设置声明    类型化数组名称[];};

未确定大小的数组只能显示为结构的最后一个成员。,只要进一步成员在任何封闭式结构,未声明包含未确定大小的数组声明的结构可以在其他结构内嵌套。一些这样的结构不允许。sizeof 运算符,那么,当应用于此类型的变量或于类型,假定 0 数组的大小。

,可在另一个结构或联合时,的成员结构声明还可以指定,而无需声明。字段名提升到封闭结构。例如,一个无名称的结构如下所示:

struct s
{
    float y;
    struct
    {
        int a, b, c;
    };
    char str[10];
} *p_s;
.
.
.
p_s->b = 100;  /* A reference to a field in the s structure */

有关结构的信息 结构和联合成员 引用。

关闭 Microsoft 特定

请参见

概念

声明和变量声明