第7讲结构体与指针ppt课件.ppt
《第7讲结构体与指针ppt课件.ppt》由会员分享,可在线阅读,更多相关《第7讲结构体与指针ppt课件.ppt(49页珍藏版)》请在三一办公上搜索。
1、1,复习:(1)结构体变量的定义与引用(2)结构体数组,新内容:(1)指向结构体变量的指针(2)指向结构体数组的指针(3)结构体指针作为函数参数(4)用指针处理链表,第7讲 结构体与指针,2,复习:结构体变量的定义与引用,注意不要忘了分号,结构体类型定义形式:,struct 结构体类型名 数据类型 成员名1;数据类型 成员名2;:数据类型 成员名n;,关键字,用户定义的标识符,3,2.定义结构体类型同时定义变量 struct student char name10;int age;int s1,s2;st1,st2;,1.先定义结构体类型,再定义变量 struct student char n
2、ame10;int age;int s1,s2;struct student st1,st2;,复习:结构体变量的定义与引用,结构体变量的定义,结构体类型定义,结构体 变量定义,结构体变量占用的字节数可用 sizeof 运算符算出,printf(“%dn”,sizeof(struct student);printf(“%dn”,sizeof(st1);,4,复习:结构体变量的定义与引用,例:struct date int year;int month;int day;struct stud char name10;struct date birthday;int s1,s2;,结构体类型可以嵌
3、套定义,或:struct stud char name10;struct date int year;int month;int day;birthday;int s1,s2;,5,复习:结构体变量的定义与引用,应用typedef定义结构体类型,struct student char name10;int age;int s1,s2;struct student st1,st2;,typedef struct student char name10;int age;int s1,s2;SD;SD st1,st2;,优点:书写简单,使程序具有更好的移植性,6,复习:结构体变量的定义与引用,引用结
4、构体变量中的成员(点记法)格式:结构体变量名.成员名,struct student char name10;int age;int s1,s2;st1,st2;,strcpy(st1.name,“Mary”);st1.age=21;scanf(“%d%d”,相同类型的结构体变量可以进行整体赋值,只能对结构体变量的成员进行输入和输出,st2=st1;,7,11.6.1 指向结构体数据的指针,定义指向结构体变量的指针 typedef struct student char name20;int age;int s1,s2;SD;SD x,stu,*p;p=,成员的引用格式(1)结构体变量名.成员名
5、 stu.name,例:scanf(“%s”,x.name);scanf(“%d”,(2)(*指针变量名).成员名(*p).age,(3)指针变量名-成员名 p-s1,8,赋值语句 p=,指针变量p指向结构体变量student,引用结构体中的成员变量:(*p).成员名 或 p-成员名,相当于,student.成员名,9,说明:和成员运算符一样,“-”为指向运算符,是运算 优先级最高的运算符。由于成员运算符“.”的运算优先级高于运算符“*”,因此(*p).成员名中()不能少。,*p.成员名,p=,不能用指向某个结构体变量的指针指向该结构体变量的某个成员。,10,对结构体数组及其元素可以用指针来指
6、向,例如:struct struct_name char name10;int num;float score;/*定义结构体类型标识符*/struct struct_name std30,*p;,11.6.1 指向结构体数组的指针,11,赋值语句 p=std;/*p指向一个结构体数组std*/,/*指针变量p存放的是数组std的首地址*/,引用:p-name;p-num;p-score;,12,思考:赋值语句 p=std+1;和p+;分别代表指针p指向哪里?,p-name;p-num;p-score;代表的信息发生了什么变化?,13,注意:以下赋值语句都是错误的:,p=,(不能指向数组元素的
7、成员变量),p=,(数组名本身就代表该数组的首地址,因此不能使用地址运算符&),14,结构体变量作为函数参数1.函数实参和形参都用结构体变量,参数之间为值传递实参结构体变量各成员的值依次传给形参结构体变量,2.返回结构体类型值的函数 定义格式:结构体类型名 函数名(形参表)函数体;例:struct student funct(int x,float y)函数体;,注意:结构体类型是已经定义好的,11.6.3 结构体指针作为函数参数,15,#include#define N 5struct stud char name10;int s3;int sum,ave;,struct stud coun
8、t(struct stud x)int j;x.sum=0;for(j=0;j3;j+)x.sum=x.sum+x.sj;x.ave=x.sum/3;return(x);,例:求学生成绩的总分和平均分(结构体变量作参数),/定义学生的结构体类型,/计算学生三门课的总分,/返回学生的全部信息,/结构体变量作参数 返回结构体类型的值,16,void main()struct stud aN;int j;for(j=0;jN;j+)scanf(“%s%d%d%d”,aj.name,/函数调用,将aj的值传给count函数 的参数x,并将返回值赋给aj,/输入N个学生的信息,/定义结构体数组a,存放N
9、个学生的信息,17,struct stud count(struct stud*p)int j;p-sum=0;for(j=0;jsum=p-sum+p-sj;p-ave=p-sum/3;return(p);,例:求学生成绩的总分和平均分(指向结构体的指针作参数),#include#define N 5struct stud char name10;int s3;int sum,ave;,/指向结构体的指针作参数返回结构体类型的值,18,void main()struct stud aN;int j;for(j=0;jN;j+)scanf(“%s%d%d%d”,aj.name,19,void
10、main()struct stud aN,*q;int j;q=a;for(j=0;jname,20,课后作业题,定义一个结构体用于存储年、月、日数据,并定义函数用于求两个日期之间的天数。,21,11.7 用指针处理链表,链表:是可以动态地进行存储分配的一种数据结构 它是由一组动态数据链接而成的序列,结点:链表中的每一个动态数据称为一个结点,表头结点,表尾结点,NULL为空地址 表示链表到此结束,中间结点,22,一.、基本概念1.动态存储分配:根据需要临时分配内存单元用以存放数据,当数据不用时可以随时释放内存单元2.链表:是可以动态地进行存储分配的一种数据结构 它是由一组动态数据链接而成的序列
11、3.结点:链表中的每一个动态数据称为一个结点,4.结点类型:是一个包含指针项的结构体类型 一般由两部分组成:(1)数据成员:存放数据(2)指针成员:存放下一个结点的地址,23,struct sd int num;int score;struct sd*next;,链表的基本概念,24,链表的基本概念,链表的每个结点存放在内存中的不同位置,只有找到第1个结点,才能通过第1个结点的指针成员找到第2个结点 因此我们将第1个结点的地址存放在头指针中,头指针,链表的长度是不固定的,可以随时添加结点,如果将一个结点添加到链表的尾部,则新结点成为表尾结点,它的指针成员必须赋为NULL,而原来的表尾结点则成为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 指针 ppt 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2105384.html