《C程序设计教案332课时——指向函数的指针.docx》由会员分享,可在线阅读,更多相关《C程序设计教案332课时——指向函数的指针.docx(6页珍藏版)》请在第一文库网上搜索。
1、教案序号033周次授课形式新授授课章节名称指向函数的指针教学目的理解指向函数的指针教学重点学会使用指向函数的指针教学难点学会使用指向函数的指针使用教具机房课外作业课后体会授课主要内容 8.5.1什么是函数指针 如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址,称为这个函数的指针。 8.5.1什么是函数指针 可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如:int(*p)(int,int);定义P是指向函数的指针变量,它可以指向类型为整型且有两个整型参数的函数。P的类型用int(*)(int,int)
2、表示 8.5.2用函数指针变量调用函数例8.22用函数求整数a和b中的大者。解题思路:定义一个函数max,实现求两个整数中的大者。在主函数调用max函数,除了可以通过函数名调用外,还可以通过指向函数的指针变量来实现。分别编程并作比较。(1)通过函数名调用函数inc1udeintmain()intmax(int,int);inta,b,c;Printf(p1easeenteraandb:);scanf(z,%d,%d,&a,&b);c=max(a,b);printf(%d,%d,max=%dn*,a,b,c);return0;)intmax(intx,inty)intz;if(xy)z=x;e1
3、sez=y;return(z);)(2)通过指针变量访问它所指向的函数#inc1udeintmainOintmax(int,int);int(*p)(int,int);inta,b,c;p=max;printf(z,p1easeenteraandb:);scanf(%d,%d,&a,&b);c=(*p)(a,b);printf(%d,%d,max=%dn”,a,b,c);returnO;)8.5.3怎样定义和使用指向函数的指针变量定义指向函数的指针变量的一般形式为数据类型(*指针变量名)(函数参数表列);如int(*p)(int,int);p=max;对=max(a,b);错p+n,p+,p一
4、等运算无意义例8.23输入两个整数,然后让用户选择1或2,选1时调用InaX函数,输出二者中的大数,选2时调用min函数,输出二者中的小数。解题思路:定义两个函数InaX和min,分别用来求大数和小数。在主函数中根据用户输入的数字1或2,使指针变量指向InaX函数或Inin函数。inc1udeintmain()intmax(int,int);intmin(intx,inty);int(*p)(int,int);inta,b,c,n;scanf(z,%d,%d,z,&a,&b);scanf(i*%dt,&n);if(n=1)p=max;e1seif(n=2)p-min;C=(*p)(a,b);p
5、rintf(z,a=%d,b=%dn”,a,b);if(n=1)printf(ax=%dnzz,c);e1sePrintf(min=%dn”,c);return0;)intmax(intx,inty)intz;if(xy)z=x;e1sez=y;return(z);)intmin(intx,inty)intz;if(x 8.5.4用指向函数的指针作函数参数 指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数 指向函数的指针可以作为函数参数,把函数的入口地址传递给形参,这样就能够在被调用的函数中使用实参函数 8.5.4用指向函数的指针作函数参数intmain()fun(f1,f
6、2)voidfun(int(*x1)(int),int(*x2)(int,int)inta,b,i=3,j=5;a=(*x1)(i);b=(*x2)(i,j);例8.24有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中大者,输入2,就给出a和b中小者,输入3,则求a与b之和。解题思路:与例8.23相似,但现在用一个函数fun来实现以上功能。inc1udeintmain()voidfun(intx,inty,int(*p)(int,int);intmax(int,int);intmin(int,int);intadd(int,int);inta=34,b=-21,n;Prin
7、tf(p1easechoose1,2or3:);SCanf(%d,&n);if(n=1)fun(a,b,max);e1seif(n=2)fun(a,b,min);e1seif(n=3)fun(a,b,add);return0;intfun(intx,inty,int(*p)(int,int)intresout;resout=(*p)(x,y);printf(%dnw,resout);)intmax(intx,inty)intz;if(xy)z=x;e1sez=y;printf(ax=z,);return(z);intfun(intx,inty,int(*p)(int,int)intresout
8、;resout=(*p)(x,y);printf(ii%dnt,resout);intmax(intx,inty)intz;if(xy)z=x;e1sez=y;PrintfCmax=*);return(z);intfun(intx,inty,int(*p)(int,int)intresu1t;resu1t=(*p)(x,y);printf(ii%dnt,resu1t);)intmax(intx,inty)intz;if(xy)z=x;e1sez=y;Printf(max=);return(z);intmin(intx,inty)intz;if(xy)z=x;e1sez=y;printf(*min=z,);return(z);intadd(intx,inty)intz;z=x+y;PrinIf(sum=);return(z);