**
第3篇 高级应用
**
第11章 结构体和共用体
迄今为止,我们在程序中用到的都是基本数据类型。但实际开发中,有时简单的变量类型无法满足程序中各种复杂的数据要求,因此C语言还提供了构造类型。构造类型数据是由基本类型数据按照一定规则组成的。
本章致力于使读者了解结构体的概念,掌握结构体和共用体的使用方法,并结合具体实例使大家对结构体和共用体数组、指针有一个更为深刻的理解。
本章的知识架构及重难点如下:
11.1 结构体
前面我们学习过许多基本数据类型,如整型int、字符型char等,还学习了数组这种构造类型。数组中,所有的数据都是同一类型,调用起来非常方便。
除此以外 ,有时我们需要定义一些复杂的数据类型,它可能包括多个不同属性,每个属性需要用不同的类型来表示。该怎么实现呢?C语言中,可以把一些有内在联系的不同变量组织起来,封装成一个整体,即定义成一个结构体(structure),以此来表示一种新的数据类型。之后,就可以像处理基本数据类型那样,对结构体类型进行各种操作。
11.1.1 结构体类型的声明
结构体是一种构造类型,它由若干成员组成。其成员可以是一个基本数据类型,也可以是另一个构造类型。声明一个结构体的过程,就是创建一种新的类型名的过程。
声明结构体时使用的关键字是struct,其一般形式如下:
struct 结构体名
{
成员列表
};
关键字struct表示声明的是一个结构体,”结构体名“表示要创建的新类型名,大括号中的”成员列表“包括构成该结构体的所有成员。注意,声明结构体时大括号后的分号“;"不能遗漏。
例如,商品一般包括产品名称,形状,颜色,功能,价格和产地等属性,如图11.1所示。很显然,“商品”这种类型并不能使用任何一种基本类型来表示,而需要为其构造一个结构体。
下面来创建“商品(Product)"这种类型,声明代码如下:
struct Product /*声明商品结构体*/
{
char cName[10]; /*产品名称*/
char cShape[20]; /*形状*/
char cColor[10]; /*颜色*/
char cFunc[20]; /*功能*/
int iPrice; /*价格*/
char cArea[20]; /*产地*/
}
上述代码使用关键字struct声明了一个名为Product的结构体类型,在结构体中定义了6个变量,分别表示产品名称,形状,颜色,功能,价格和产地,并为其设置了相对应的类型。
11.1.2 结构体变量的定义
声明完结构体后,就创建了一种新的类型名,后续就可以使用这种新的类型名定义变量。定义结构体变量的方式有如下3种。
(1)先声明结构体类型,再定义变量。
例如,使用前面声明的Product结构体类型定义两个结构体变量product1和product2,代码如下:
struct Product /*声明结构体*/
{
char cName[10]; /*产品名称*/
char cShape[20]; /*形状*/
char cColor[10]; /*颜色*/
char cFunc[20]; /*功能*/
int iPrice; /*价格*/
char cArea[20]; /*产地*/
};
struct Product product1; /*定义结构体类型变量product1*/
struct Product product2; /*定义结构体类型变量product2*/
struct Product是结构体类型名,而product1和product2是结构体变量名。既然都是使用Product类型定义的变量,那么这两个变量就具有相同的结构。
技巧:在一些大型开发中,为了便于修改和使用,常常将结构体类型的声明放在一个头文件中,这样在其他源文件中如果需要使用该结构体类型