文档介绍:第10章结构体与其它数据类型
本章教学目的:
理解结构体和共用体的概念,掌握结构体数组和结构体指针的使用方法,了解用指针处理链表的基本操作,了解枚举类型的概念和用typedef定义类型的方法。
本章教学重点:
结构体和共用体的概念,结构体数组和结构体指针。
本章教学难点:
用指针处理链表。
本章作业:
、4,、4
结构体的概念
在数据库中为了表示一些相关的简单数据类型,如学生的挡案、职工工资表、图书资料等,可以定义数据库中表的结构,然后根据数据库中表的结构建立若干个“记录”,形成数据库中的表文件,其中每个记录是由多项数据构成的一个集合。
C语言为了表达此类问题,可使用结构体类型,并定义其变量、赋值,形成一个包含多项数据的数据单元。
例如,要用一个结构体来描述学生,每个学生,有学号、姓名、年龄、性别、成绩等数据。每项数据有不同的类型,类型为:学号(无符号整型)、姓名(字符型)、性别(字符型)、年龄(整型)、成绩(实型)等。要把这些和学生关联在一起,则需要声明以下结构体类型:
struct student
{unsigned num;
char name[10];
char sex;
int age;
float score;
};
其中struct 是结构体的关键字;student是结构体的标识符,即结构体名;num、name[10]、sex、age、score 等是结构体成员,组成成员表列。
结构体的类型声明方式为:
struct 结构体名
{
成员表列;
};
其中各成员应进行类型说明。
结构体类型声明时应注意以下几点:
(1) 结构体类型声明并不引起内存分配,结构体类型变量的定义才引起内存的分配。
(2) 在声明结构体类型时,允许先声明过的结构体类型作另一个结构体类型的成员,如右所示。
struct score
{float score_math;
float score_english;
float puter;
};
struct student
{unsigned num;
char name[10];
char sex;
int age;
struct score class;
};
结构体类型变量和数组
结构体类型变量
 
结构体变量定义有三种方法。
(1) 先声明结构体类型,
后定义变量。
这种方法的语法格式为:
struct 结构体名
{
成员表列;
};
struct 结构体名结构体变量表;
例如:
struct student
{ unsigned num;
char name[10];
char sex;
int age;
float score;
};
struct student student1,student2;
定义了student结构体类型的2个变量:student1,student2。
(2) 在声明结构体类型
的同时定义变量。
这种方法的语法格式为:
struct 结构体名
{
成员表列;
}结构体变量表;
例如:
struct student
{ unsigned num;
char name[10];
char sex;
int age;
float score;
}student1,student2,student3;
定义了student结构体类型的三个变量:student1,student2,student3。
(3) 直接定义变量。
这种方法的语法格式为:
struct
{
成员表列;
} 结构体变量表;
例如: struct
{ unsigned num;
char name[10];
char sex;
int age;
float score;
}student1,student2,student3;
直接定义了结构体类型的三个变量student1、student2和student3。但这种定义方式因无类型名,所以不能再定义更多的变量。
定义了一个结构体类型的变量后,系统就为其按结构分配相应的内存,其大小取决于结构体的具体成员,如前面所举的例子中,一个struct student的结构体类型变量应分配:
num(2字节)+name(10字节)+sex(1字节)
+age(2字节)+score(4字节)=19字节
无论是否给每个成员赋值,它都以占据19个字节而存在。
结构体变量初始化是在定义变量时,指定变量各个成员的初始值。
例如:
struct student
{ unsig