C 语言重拾【八】结构和其他数据形式
在 C 语言中,结构体是一种非常重要的数据类型。它可以将不同的数据类型组合成一个整体,方便程序员进行操作。比如,我们可以定义一个结构体来表示一个人的信息,包括姓名、年龄、性别等等。使用结构体可以使得程序更加清晰易懂,提高代码的可读性和可维护性。
结构声明(structure declaration)描述了一个结构的组织布局。声明类似下面这样:
1 | struct book { |
该声明描述了一个由两个字符数组和一个 float
类型变量组成的结构。该声明并未创建实际的数据对象,只描述了该对象由什么组成。我们来分析一些细节。首先是关键字 struct
,它表明跟在其后的是一个结构,后面是一个可选的标记(该例中是 book
),稍后程序中可以使用该标记引用该结构。所以,我们在后面的程序中可以这样声明:
1 | struct book library; |
这把 library
声明为一个使用 book
结构布局的结构变量。
结构有两层含义。一层含义是“结构布局”,刚才已经讨论过了。结构布局告诉编译器如何表示数据,但是它并未让编译器为数据分配空间。下一步是创建一个结构变量,即是结构的另一层含义。程序中创建结构变量的一行是:
1 | struct book library; |
编译器执行这行代码便创建了一个结构变量 library
。编译器使用book模板为该变量分配空间:一个内含 MAXTITL
个元素的 char
数组、一个内含 MAXAUTL
个元素的 char
数组和一个 float
类型的变量。这些存储空间都与一个名称 library
结合在一起。
1 | struct book library; |
是以下声明的简化:
1 | struct book { |
换言之,声明结构的过程和定义结构变量的过程可以组合成一个步骤。如下所示,组合后的结构声明和结构变量定义不需要使用结构标记:
1 | struct { /* 无结构标记 */ |
然而,如果打算多次使用结构模板,就要使用带标记的形式;或者,使用本章后面介绍的 typedef
。