c语言函数指针和指针函数.doc

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

【函数指针】 ?????? 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。 1.函数指针定义 函数类型 (*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。 例如: int (*f)(int x); double (*ptr)(double x); 在定义函数指针时请注意: ??? 函数指针和它指向的函数的参数个数和类型都应该是—致的; 函数指针的类型和函数的返回值类型也必须是一致的。 2.函数指针的赋值 函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。 例如, int func(int x);?? /* 声明一个函数 */ int (*f) (int x);??? /* 声明一个函数指针 */ f=func;??????????? /* 将func函数的首地址赋给指针f */ 赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。 3.通过函数指针调用函数 函数指针是通过函数名及有关参数进行调用的。 与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。 由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步: 首先,要说明函数指针变量。 例如:int (*f)(int x); 其次,要对函数指针变量赋值。 例如: f=func;??? (func(x)必须先要有定义) 最后,要用 (*指针变量)(参数表);调用函数。 例如:??? (*f)(x);(x必须先赋值) 【例】任意输入n个数,找出其中最大数,并且输出最大数值。 main() { ??????? int f(); ??????? int i,a,b; ??????? int (*p)();??? /* 定义函数指针 */ ??????? scanf(%d,a); ??????? p=f;??????????? /* 给函数指针p赋值,使它指向函数f */ ??????? for(i=1;i9;i++) ??????? { ??????????????? scanf(%d,b); ??????????????? a=(*p)(a,b);??? /* 通过指针p调用函数f */ ??????? } ??????? printf(The Max Number is:%d,a) } f(int x,int y) { ??? int z; ??? z=(xy)?x:y; ??? return(z); } 运行结果为: 343 -45 4389 4235 1 -534 988 555 789 The Max Number is:4389 【指针函数】 一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。 ??????? 返回指针的函数,一般定义格式为: ??????? 类型标识符??? *函数名(参数表) int *f(x,y); 其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。 如:char *ch();表示的就是一个返回字符型指针的函数,请看下面的例题: 【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2. #include stdio.h main() { ??? char *ch(char *,char *); ??? char str1[]=I am glad to meet you!; ??? char str2[]=Welcom to study C!; ??? printf(%s,ch(str1,str2)); } char *ch(char *str1,char *str2) { ??? int i; ??? char *p; ??? p=str2 ??? ??? if(*str2==NULL) exit(-1); ??? do ??? { ??????? *str2=*str1; ?????

文档评论(0)

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

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

1亿VIP精品文档

相关文档