文章目录
设计程序时,最重要的步骤之一是选择表示数据的方法。在许多情况下,简单变量甚至是数组还不够。为此,C提供了结构变量(structure variable)提高表示数据的能力,它能让你创造新的形式。
一、结构体基础
1.1 什么是结构体
结构体与数组类似,都是由若干分量组成的,与数组不同的是,结构体的成员可以是不同类型,可以通过成员名来访问结构体的元素。
1.2 建立结构声明
结构声明(structure declaration)描述了一个结构的组织布局。声明语法如下:
structure 结构体名 {
数据类型 成员1;
数据类型 成员2;
数据类型 成员3;
...
}
# include <stdio.h>
#define MAXLARGE 20
// 声明一个结构体名为book的结构体
struct book
{
// 定义int类型的BookNum成员
int booknum;
// 定义char类型的Title数组成员,数组最大为MAXLARGE
char title[MAXLARGE];
// 定义char类型的author数组成员,数组最大为MAXLARGE
char author[MAXLARGE];
// 定义double类型的price成员
double price;
};
int main(void){
return 0;
}
该声明描述了一个由一个int类型变量,两个char类型变量的数组和一个double类型的结构体。该声明并未创建实际的数据对象,只描述了该对象由什么组成。
在结构声明中,yong一对花括号括起来的是结构成员列表。每个成员都用自己的声明来描述。例如:title是一个内含MAXLARGE个元素的数组。成员可以是任意一种数据类型,甚至可以是其他结构!右花括号后的分号是必须的,它表示结构布局定义结束。
结构声明可以放在函数的外部也可以放在函数的内部。如果放在函数内部,就如同局部变量一样,只限于函数的使用。如果放在外部,那在声明之后的所有函数都可以使用。
1.3 定义结构变量
结构有两层含义。一层是结构布局,上面已经说过,结构布局是告诉编译器如何表示数据,但是它并未让编译器为数据分配空间。下一步是创建一个结构变量,即是结构体的另一层含义。
程序中创建结构变量的是:
// 声明一个结构体名为book的结构体
struct book
{
// 定义int类型的BookNum成员
int booknum;
// 定义char类型的Title数组成员,数组最大为MAXLARGE
char title[MAXLARGE];
// 定义char类型的author数组成员,数组最大为MAXLARGE
char author[MAXLARGE];
// 定义double类型的price成员
double price;
// library表示创建一个book结构体的变量名
} library;
等效于:
struct book library;
编译器执行这行代码便创建了一个结构变量library。编译器使用book模板为该变量分配空间。
声明结构的过程和定义结构变量的过程可以组合成一个步骤。则如下所示:
struct
{
// 定义int类型的BookNum成员
int booknum;
// 定义char类型的Title数组成员,数组最大为MAXLARGE
char title[MAXLARGE];
// 定义char类型的author数组成员,数组最大为MAXLARGE
char author[MAXLARGE];
// 定义double类型的price成员
double price;
} library; // 声明的右花括号后跟变量名
在结构变量的声明中,struct book所起的作用相当于一般声明中的int或float。例如:可以定义一个struct book类型的变量,甚至是指向struct book的指针。
struct book doyle, panish, *ptbook;
1.4 初始化结构
初始化一个结构变量与初始化数组的语法类似:
struct book library=
{
100010,
"Tom and Jerry",
"unknow",
10.00
};
1.5 访问结构成员
结构类似一个超级数组,在这个超级数组中,可以是一个元素为char类型,下一个元素为int类型,在数组中可以使用下标单独访问数组中的各个元素。而在结构体中需要使用结构成员运算符 ------( . )访问结构体中的成员。
# include <stdio.h>
#define MAXLARGE 20
struct book
{
int booknum; // 定义int类型的BookNum成员
char title[MAXLARGE]; // 定义char类型的Title数组成员,数组最大为MAXLARGE
char author[MAXLARGE]; // 定义char类型的author数组成员,数组最大为MAXLARGE
double price