资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,第,9,讲 结构体与指针、函数,本讲内容:,(1),结构体类型的指针变量,(2),结构体与函数,第9讲 结构体与指针、函数本讲内容:,1,7.4.1,指向结构体变量的指针,1.,定义,struct student,char name20;,int age;,int s1,s2;,stu=Mary,19,78,86;,struct student,*p;,p=,struct,结构体名,*,结构体变量名,Mary,19,78,86,stu,2010,2030,2034,2038,p,2010,结构体的地址为结构体第一个成员的地址。,p=,&stu.name,;,是否可以?,不可以,类型不匹配。,p=,(struct student*),改为:,7.4.1 指向结构体变量的指针1.定义struct,2,7.4.1,指向结构体变量的指针,2.,成员的引用格式,(1),结构体变量名,.,成员名,stu.age,(2)(*,指针变量名,).,成员名,(*p).age,(3),指针变量名,-,成员名,p-age,指向运算符,p-age+,分析:,+p-age,等价于,(p-age)+,等价于,+(p-age),不等于,(+p)-age,p-age,类型?,不是指针类型,struct student,char name20;,int age;,int s1,s2;,;,struct student,stu,*p;,p=,gets(,stu.name,);,(*p).age,=21;,p-s1,=87;,p-s2,=90;,7.4.1 指向结构体变量的指针2.成员的引用格式(2),3,1.,定义,struct student,a3,*p,;,7.4.2,指向结构体数组的指针,2.,使用,for(,p=a;pname,);,scanf(,%d,%d%d,&p-age,赋初值为数组名,p+,表示使指针指向下一个,结构体,而不是下一个成员,Mary,21,78,86,Alex,20,90,80,Mike,19,75,68,st0,st1,st2,p,p,p,1.定义 struct student a3,4,7.4.2,指向结构体数组的指针,思考:,1.,(+p)-age,先使,p,加,1,,然后的到,p-age,的值,先得到,p-age,的值,然后使,p,加,1,2.,(p+)-age,3.,+p-age,4.,p-age+,先使,p-age,,然后的到,p-age,的值,先得到,p-age,的值,然后使,p-age,加,1,7.4.2 指向结构体数组的指针思考:1.(+p)-a,5,1.,函数实参和形参都用结构体变量,参数之间为,值传递,实参结构体变量,各成员的值依次传给,形参结构体变量,7.5.1,结构体变量作为函数参数,struct student,char name20;,int age;,int s1,s2;,;,void main(),struct student,stu=Alex,22,98,100,;,aaa,(,stu,);,printf(%d,stu.age);,void,aaa,(,struct student,sss,),sss.age=33;,name,age,s1,s2,Alex,22,98,100,name,age,s1,s2,stu,sss,Alex,22,98,100,33,1.函数实参和形参都用结构体变量,参数之间为值传递7.,6,7.5.1,结构体变量作为函数参数,例,1,输入任意日期,计算该天是本年中第几天。使用函数计算天数。,分析:,1.,日期如何表示,?,定义日期结构体。,struct date,int year;,int month;,int day;,;,2.,函数如何设计,?,函数形参(输入):,日期结构体变量,函数返回值(输出):,天数,int fun(,struct date d,),函数原形:,7.5.1 结构体变量作为函数参数例1 输入任意日期,计算,7,7.5.1,结构体变量作为函数参数,3.,如何计算,?,如,1999.2.12,31,+12,如,1999.3.13,31+28,+13,如,2000.3.13,31+,29,+13,天数,=,前几个月份天数之和,+,当月第几天,考虑闰年,如何计算前几个月天数之和?,for(i=1;i,d.month,;i+),switch(i),case 1:,case 3:,case 5:,case 7:,case 8:,case 10:,case 12:t=31;break;,case 4:,case 6:,case 9:,case 11:t=30;break;,case 2:if(,d.year,%4=0&,d.year,%100!=0|,d.year,%400=0),t=29;,else t=28;,days=days+t;,7.5.1 结构体变量作为函数参数3.如何计算?如 199,8,7.5.1,结构体变量作为函数参数,int fun(,struct date d,),int days=0,i,t;,for(i=1;iage=33;,Alex,22,98,100,stu,p,1000,1020,1024,1028,33,sss,1000,1000,7.5.2 结构体指针作为函数参数2.指向结构体变量(数组,11,例,2,按成绩对学生信息进行从高到底的排序,#,include ,#define N 30,struct stud,int n;,char name10;,int s;,;,7.5.2,结构体指针作为函数参数,void sort(,struct stud,*p,),int i,j;,struct stud,temp;,for(i=0;iN,-,1;i+),for(j=i+1;js s),temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;,注意进行比较的是元素,sti,和,stj,的成绩成员,s,但进行交换的是元素,sti,和,stj,例2 按成绩对学生信息进行从高到底的排序#include,12,void main(),int i;,struct stud,stN;,for(i=0;iN;i+),scanf(,%,d,%,s,%,d,&,sti.n,sti.name,&,sti.s);,sort(,st,);,for(i=0;iN;i+),printf(,%,4d,%,10s,%,4d,sti.n,sti.name,sti.s);,7.5.2,结构体指针作为函数参数,/,传递的结构体数组名,void main()7.5.2 结构体指针作为函数参数,13,7.5.3,函数返回值为结构体类型,格式:,结构体类型,函数名(形参表),函数体;,例,3,编写函数输入结构体变量,在主函数中输出,struct student,int num;,char name20;,float score;,;,struct student,input,(),struct student b;,scanf(%d%s%f,&b.num,b.name,return,b,;,void main(),struct student stu;,stu=,input(),;,printf(%d,%s,%5.2fn,stu.num,stu.name,stu.score);,7.5.3 函数返回值为结构体类型格式:结构体类型 函数名(,14,实验,实验:,P99,实验,1,(,3,),Class is over,实验实验:P99 实验1(3)Class is over,15,
展开阅读全文