当前位置:嗨网首页>书籍在线阅读

04-定义结构变量

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.3 定义结构变量

结构有两层含义。一层含义是“结构布局”,刚才已经讨论过了。结构布局告诉编译器如何表示数据,但是它并未让编译器为数据分配空间。下一步是创建一个结构变量,即是结构的另一层含义。程序中创建结构变量的一行是 :

struct book library;

编译器执行这行代码便创建了一个结构变量 library 。编译器使用 book 模板为该变量分配空间:一个内含 MAXTITL 个元素的 char 数组、一个内含 MAXAUTL 个元素的 char 数组和一个 float 类型的变量。这些存储空间都与一个名称 library 结合在一起(见图14.1)。

74.png

图14.1 一个结构的内存分配

在结构变量的声明中, struct book 所起的作用相当于一般声明中的 intfloat 。例如,可以定义两个 struct book 类型的变量,或者甚至是指向 struct book 类型结构的指针:

struct book doyle, panshin, * ptbook;

结构变量 doylepanshin 中都包含 titleauthorvalue 部分。指针 ptbook 可以指向 doylepanshin 或任何其他 book 类型的结构变量。从本质上看, book 结构声明创建了一个名为 struct book 的新类型。

就计算机而言,下面的声明:

struct book library;

是以下声明的简化:

struct book {
     char title[MAXTITL];
     char author[AXAUTL];
     float value;
} library;    /* 声明的右花括号后跟变量名*/

换言之,声明结构的过程和定义结构变量的过程可以组合成一个步骤。如下所示,组合后的结构声明和结构变量定义不需要使用结构标记:

struct { /* 无结构标记 */
     char title[MAXTITL];
     char author[MAXAUTL];
     float value;
} library;

然而,如果打算多次使用结构模板,就要使用带标记的形式;或者,使用本章后面介绍的 typedef

这是定义结构变量的一个方面,在这个例子中,并未初始化结构变量。