c11讲-课件函数指针.pptx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

C语言编程第十一讲:函数指针

本讲内容一、函数指针定义二、函数回调三、动态排序四、函数返回值是函数指针

一、函数指针定义

函数地址栈区堆区静态区常量区代码区intmaxValue(inta,intb){ returnab?a:b;}函数名和数组名一样是地址!

函数指针定义intmaxValue(inta,intb)int(*p)(inta,intb)=NULL;函数指针定义,p是变量,其它是类型(通常没有形参a,b)

函数指针使用p=maxValue;intm=p(3,5);赋值函数名指针可当函数用

练习1 voidprintHello(void);定义一个可以指向上述函数的函数指针,并通过函数指针实现调用该函数

练习2定义两个函数,一个求最大值,一个求和,输入max或sum分别求3,5的最大值或和(提示:定义一个函数指针,根据输入内容指向不同函数,最后一次调用完成)

二、回调函数

函数指针做参数

intgetValue(inta,intb,int(*p)(int,int));函数指针做getValue函数的参数函数名

函数调用

intvalue=getValue(3,5,maxValue);getValue执行的过程中再调用(回调)maxValue

回调过程intmaxValue(…){ ......; returnmax;}voidgetValue(…int(*p)(int,int)){ p(3,5);//回调}函数名做参数传递

练习3写一函数查找成绩90分以上的学员,使用回调函数在姓名后加“你真棒”

三、动态排序

排序需求不定有30个学生需要排序1.按姓名排2.按成绩排3.按年龄排….一周后新需求,按出勤率排?无法预测的需求变更!

排序voidsortArray(int*array,intcount){ for(inti=0;icount-1;i++){ for(intj=0;jcount-i-1;j++){ if(条件){ 交换 } } }}决定排序方式的重要语句封装成函数然后在此回调

整型数组动态排序typedefbool(*PFUN)(int,int);为函数指针类型起名为PFUNvoidsortArray(int*arr,intcount,PFUNp);动态排序函数声明

练习5用动态排序实现学生按不同条件排序

四、函数返回值是函数指针

返回值为函数指针PFUNgetFunctionByName(char*name);通过功能名称查找对应的函数

数据结构typedefstructnameFunctionPair{

charname[30];

PFUNfunction;

}NameFunctionPair;功能名(name)调用函数(function)“max”maxValue“minminValue“avgavgValueNameFunctionPairlist[3];

查找对应函数功能名(name)调用函数(function)“max”maxValue“minminValue“avgavgValuePFUNfun=NULL;fun=getFunctionByName(“min”)

调用返回的函数intvalue=fun(3,5);使用返回的函数指针调用函数,完成动态调用

练习5对list增加元素,sum求和,mul求乘积.

总结一、函数指针定义(如何定义一个对应函数的指针变量?)二、回调函数(如何实现函数的回调?)三、动态排序(抽离开那部分代码,并提供接口?)四、函数返回值是函数指针(有什么做用?如何实现?)

课程预告C语言基础考试

文档评论(0)

kay5620 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8001056127000014

1亿VIP精品文档

相关文档