文档介绍:C语言程序设计
第10章结构体与共同体
结构体与共用体
第十章
§ 结构体类型的定义
结构体由若干成员组成,各成员可有不同的类型。在程序中要使用结构体类型,必须先对结构体的组成进行描述。例如,学生信息可用结构体描述为:
struct student
{
int num ; /*学号*/
char name[20];/*姓名*/
char sex; /* 性别*/
int age; /*年龄*/
float score; /*成绩*/
char addr[40]; /*家庭住址*/
};
需要特别指出的是“struct student”是程序设计者自己定义的类型,它与系统预定义的标准类型(如int、char等)一样,可以用来定义变量,使变量具有struct student类型。例如:
struct student st1,st2[20];
分别定义了struct student结构体类型的变量st1和struct student结构体类型的数组变量st2。
其中,关键字struct引入结构体类型的定义。struct之后任选的标识符是结构体类型的名字。用花括号括起来的是结构体成员说明。
上例说明结构体类型struct student有6个成员,分别命名为num、name、sex、age、score和addr。这6个成员分别表示学生的学号、姓名、性别、年龄、成绩和家庭住址,显然它们的类型是不同的。
结构体类型的定义形式为:
struct 结构体类型名
{
成员说明表列
};
其中,花括号内的内容是该结构体类型的成员说明,每个成员说明的形式为:
类型名成员名;
实际上,凡是相关的若干数据对象都可组合成一个结构体,在一个结构体名下进行管理。例如,由日、月、年组成的结构体类型为:
struct date
{
int day;
int month;
int year;
};
又如,某职工信息结构体类型为:
struct person
{
char name[20]; /*姓名*/
char address[40]; /*地址*/
float salary; /*工资*/
float cost; /*扣款*/
struct date hiredate; /*聘任日期*/
};
其中,结构体类型struct person含有一个结构体类型成员hiredate。
该例子说明结构体类型可以嵌套定义,即一个结构体类型中的某些成员又是其他结构体类型。但是这种嵌套不能包含自身,即不能由自己定义自己。
结构体类型说明中,详细列出了一个结构体的组成情况、结构体的各成员名及其类型。结构体类型说明了一个数据结构的“模式”,但不定义“实物”,并不要求分配实际的存储空间。
程序要实际使用结构体,必须定义结构体变量。编译程序在为结构体变量分配存储空间时,其中各成员的存储格式及其意义与结构体类型保持一致。
§ 结构体类型变量
要定义一个结构体类型的变量,可采取以下3种方法。
结构体类型变量的定义
1. 先定义结构体类型,再定义变量
如上面已定义了一个结构体类型struct student,可以用它来定义变量。例如:
struct student student1,student2;
定义student1和student2为struct student类型变量,即它们具有struct student类型的结构体变量。