- 1、本文档共90页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chap.10 指针 可以用一个指针变量指向一个函数,通过指针变量来访问它指向的函数。将main函数改写为: main( ) {int max(int,int); int (*p)( ); /*定义p是一个指向函数的指针变量*/ int a,b,c; p=max; /*将max的入口地址赋给指针变量p*/ scanf(“%d,%d”,a,b); c=(*p)(a,b); /*用指针形式实现函数的调用*/ printf(“a=%d,b=%d,max=%d”,a,b,c); } Chap.10 指针 其中int(*p)( )定义p是一个指向函数的指针变量,此函数带回整型的返回值。注意,p两侧的括弧不可省略,表示p先与*结合,是指针变量,然后再与后面的( )结合,表示此指针变量指向函数,这个函数值(即函数返回的值)是整型的。 赋值语句“p=Max;”的作用是将函数Max的入口地址赋给指针变量p。和数组名代表数组起始地址一样,函数名代表该函数的入口地址。这时,p就是指向函数的指针变量,也就是p和M都指向函数的开头,调用*p就是调用函数max。 请注意p是指向函数的指针变量,它只能指向函数的入口处而不可能指向函数中间的某一条指令处,因此不能用。(p+1)来表示函数的下一条指令。C=(*p)(a,b);就是用指针形式实现函数的调用。 Chap.10 指针 说明: 1.指向函数的指针变量的一般定义形式为 数据类型标识符(* 指针变量名)( ); 2.(*p)( )表示定义一个指向函数的指针变量,它不是固定指向哪一个函数的,而是表示定义了这样一个类型的变量,它是专门用来存放函数的入口地址。在一个程序中,一个指针变量可以先后指向不同的函数。 3.在给函数指针变量赋值时,只需给出函数名而不必给出参数。如:p=max; 4. 用函数指针变量调用函数时,只需将(*p)代替函数名即可,在(*p)之后的括弧中根据需要写上实参。如:c=(*p)(a,b); 5. 对指向函数的指针变量,像p+n、p++、p--等运算是无意义的。 Chap.10 指针 10.5.2 用指向函数的指针作函数参数 函数指针变量常用的用途之一是把指针作为参数传递到其它函数。以前我们介绍过,函数的参数可以是变量、指向变量的指针变量、数组名、指向数组的指针变量等。现在介绍指向函数的指针变量也可以作为参数,以便实现函数地址的传递,也就是将函数名传给形参。 Chap.10 指针 它的原理如下:有一个函数sub, 它有两个形参(x(1),x(2)),定义x1和x2为指向函数的指针变量。在调用函数sub时,实参用两个函数名f1和f2给形参传递函数地址。这样在函数sub中就可以调用f1和f2函数了。如: Chap.10 指针 函数sub的形参x1,x2(指针变量)在函数sub未被调用时并不占内存单元,也不指向任何函数。在sub被调用时,把实参函数f1和f2的入口地址传给形参指针变量x1和x2,使x1和x2指向函数f1和f2。这时,在函数sub中,用*x1和*x2就可以调用函数f1和f2。 在每次调用sub函数时,如果要调用的函数是不固定的,这时用指针变量就比较方便。只要在每次调用sub函数时给出不同的函数名作为实参即可,sub函数不必作任何修改。这种方法符合结构化程序设计方法。 Chap.10 指针 例:设一个函数process, 在调用它的时候,每次实现不同的功能。输入a和b两个数,第一次调用process时找出a和b中大者,第二次找出其中小者,第三次求a和b之和。程序如下: main( ) {int max(int,int); /* 函数声明*/ int min(int,int); /* 函数声明*/ int add(int,int); /* 函数声明*/ int a,b; printf(“enter a and b:”); scanf(“%d,%d”,a,b); printf(“max=”); process(a,b,max); printf(“min=”); process(a,b,min); printf(“sum=”); process(a,b,add); } max(int x, int y) /* 函数定义*/ {int z; if(xy)z=x; else z=y; return(z); } min(int x, in
您可能关注的文档
- 2013二建建筑实务课件(巨大帮助_内部资料).ppt
- 计算机组成与结构 王爱英 第7章.ppt
- 加工贸易政策.ppt
- 操作系统原理精讲(四).ppt
- 财务会计课件3金融资产.ppt
- 国际营销第九章价格课件1.ppt
- 第4章 媒体播放工具.ppt
- 安全标准化课件第十要素(最新).ppt
- 考研西医综合心脏讲义.ppt
- 律师事务——诊所式法律教育.ppt
- 有机肥料及微生物肥料相关项目投资计划书范文 .pdf
- 医院消防维保服务投标方案(技术方案).doc
- 宣传视频制作技术服务方案(技术方案).doc
- 2024-2025学年江苏省南通市如皋市八年级(上)期末考试数学试卷(含答案) .pdf
- 主体劳务工程 投标方案(技术方案).doc
- 校外教育杯征文 浅谈如何做好小学班主任工作 .pdf
- 人教版九年级全册 Unit 5 What are the shirts made of ?Section B 2a-2e 分层练习(含答案).doc
- 人教版九年级全册 Unit 5 What are the shirts made of? Section B 3a-Self Check 分层练习(含答案).doc
- 人教版九年级全册Unit 6 When was it invented Section A 1a-2d练习(含答案).docx
- 市场营销学》试卷(答案).docx
文档评论(0)