第十一章 结构体与共用体
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十一章结构体与共用体
●教学内容
(1) 结构体的定义与结构体变量;
(2) 结构体数组;
(3) 结构体指针;
(4) 链表;
(5) 共用体;
(6) 枚举类型;
●基本要求
掌握结构体的定义方法及其作用;重点掌握链表及其应用。
了解共用体的概念及其应用
一、概述
一、引入原由
我们前面讲过数组,数组类型中的各个元素的类型是相同的,在日常应用中,仅仅有这些数据类型是不够的。有时需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。例如:学生的信息(姓名、性别、年龄、成绩、学号)。那么如何实现这种结构呢?采用的是结构体。
如:struct student
{ int num;
char name[20];
char sex;
int age;
float score;
};
二、结构体类型的一般形式
struct 结构体名
{成员表列};
成员表列:类型名成员名
如:struct student
{int num;char sex;};
二、结构体类型变量的定义、引用、初始化
一、定义方法
1、先声明类型再定义变量名
struct student
{int num;char sex;};
struct student stu1,stu2;
2、在声明类型的同时定义变量
struct student
{int num;char sex;} stu1,stu2;
3、直接定义结构体类型变量(不给出结构体名)
struct
{int num;char sex;} stu1,stu2;
4、说明:
1)类型与变量不同(变量:分配空间,可以赋值、存储、运算)
2)成员与普通变量地位相当,域名可以单独使用
3)成员也可以是一个结构体变量
如:struct date
{int month;
int day;
int year;
};
struct student
{int num;
char name[20];
char sex;
struct date birthday;
}stu1,stu2;
4)成员名可以与程序中的变量名相同,二者不代表同一对象。
5)结构体变量在内存中所占的大小为各成员所需内存量的总和。
二、结构体变量的引用
1、只能对结构体变量中的各个成员分别进行输入和输出,不能将一个结构体变量作为一
个整体进行输入和输出。引用结构体变量中成员的方式为:结构体变量名.成员名。
如:stu1.num=10001;”.”是成员运算符,优先级最高。
2、若成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级找到最低的
一级的成员。也就是说只能对最低级的成员进行操作。
3、对结构体变量成员可以像普通变量一样进行各种运算。如:
sum=stu1.score+stu2.score;
4、可以引用结构体变量成员的地址,也可引用结构体变量的地址。如
scanf(“%d”,&stu.num);pirntf(“%d”,&stu1);
三、初始化
struct student stu1={89031,”lilin”,’m’,123};
三、结构体数组
结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。
一、定义:与定义结构体变量的方法相仿
如:struct student stu[3];
在内存中存放情况(
二、初始化
struct student
{int num;
……
}stu[3]={{……},{……},{……}};
三、举例
对候选人得票的统计程序
设有3个候选人,每次输入一个得票的候选人的名字,最后输出各人得票结果。
析:每个候选人都有姓名及票数,因此可以设计一结构体类型,又由于有3个候选人,因此可设计一个结构体变量。设投票10次。
N——S图
四、结构体指针
一、指向结构体变量的指针
一个结构体变量的指针就是该变量所占据的内存段的起始地址。指针变量也可以用来指向结构体数组中的元素。
1、定义方法同“指向一般变量的指针变量”。
如:struct student stu1;struct student *p;p=&stu1;
2、赋值:将一个结构体变量的地址赋给一个结构体指针,即一个结构体指针指
向一个结构体变量。如:p=&stu1;*p=stu1;
3、应用:struct student
{char name[20];int score;}st u1={“ma lin”,90},*p;p=&stu1;
引用只能对成员引用,而不能直接输出结构体变量。可以有printf(“%d”,stu1.score);也可用指针printf(“%d”,(*p).score);*p表示
p指向的结构体变量。(*p).score表p指向结构体变量中的成员score。
以下三种形式等价:结构体.成员名、(*P).成员名、P—>成员名
二、指向结构体数组的指针
说明:P269