C++函数指针与指针函数有哪些关系和区别_第1页
C++函数指针与指针函数有哪些关系和区别_第2页
C++函数指针与指针函数有哪些关系和区别_第3页
C++函数指针与指针函数有哪些关系和区别_第4页
C++函数指针与指针函数有哪些关系和区别_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C++函数指针与指针函数有哪些关系和区别目录1.函数指针1.1概念定义1.2声明方法1.3调用方法1.4函数指针作为函数参数1.5函数指针数组2.指针函数2.1概念定义2.2调用方法3.总结

1.函数指针

1.1概念定义

函数指针是指向函数的指针变量。因此函数指针本质上是一个指针变量,只不过该指针变量指向函数。指针变量也可以指向整型变量、字符型、数组,也可以指向函数。

C语言中,每一个函数都有一个入口地址,函数指针就指向函数的入口地址,可以通过函数指针来调用函数。

例如:int(*fun)(intx,inty);

另外定义一个常用函数为voidfunc(),那么fun=func;fun这时就是func()这个函数的入口地址了。

1.2声明方法

函数指针的声明方法为:

返回值类型(*指针变量名)([形参列表])

返回值类型说明函数的返回类型,(指针变量名)中的括号不能省,括号改变了运算符的优先级,后面的形参列表表示指针变量指向的函数所带的参数列表。例如:

intfunc(intx);//声明一个函数

int(*fun)(intx,inty);//声明一个函数指针

fun=func;//将func函数的首地址赋给指针fun

或者将函数地址赋给函数指针:

fun=func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针fun就指向函数func(x)的首地址。

1.3调用方法

下面的实例说明了函数指针调用函数的方法:

#includestdio.h

//返回两个数中较大的一个

intmax(inta,intb){

returnaba:b;

intmain(){

intx,y,maxval1,maxval2;

int(*pmax)(int,int);//定义函数指针

pmax=max;

printf("Inputtwonumbers:");

scanf("%d%d",x,

maxval1=(*pmax)(x,y);

printf("Maxvalue1:%d\n",maxval1);

maxval2=pmax(x,y);

printf("Maxvalue2:%d\n",maxval2);

return0;

}

运行结果:

Inputtwonumbers:58

Maxvalue1:8

Maxvalue2:8

maxval1=(pmax)(x,y)对函数进行了调用。pmax是一个函数指针,在前面加*就表示对它指向的函数进行调用。注意()的优先级高于,第一个括号不能省略。

maxval2=pmax(x,y),pmax就是函数max的入口地址,pmax(x,y)等同于max(x,y)。

注意这里pmax是一个指针变量,它可以指向任何函数,也就是说这里指向了函数max(),但它也可以再指向其他函数。如果我们直接调用函数名称,比如max,那么它是不可变的。

1.4函数指针作为函数参数

#includestdio.h

//返回两个数中较大的一个

intmax(inta,intb){

returnaba:b;

intfun(int(*pfun)(int,int),inta,intb){

pfun(a,b);

intmain(){

intx,y,maxval;

printf("Inputtwonumbers:");

scanf("%d%d",x,

maxval=fun(max,x,y);

printf("Maxvalue:%d\n",maxval);

return0;

}

运行结果:

Inputtwonumbers:58

Maxvalue:8

maxval=fun(max,x,y)将函数max的入口地址传给了fun的形参pfun,调用pfun实际就调用了函数max。

1.5函数指针数组

函数指针数组是一个元素均为函数指针的数组。

#includestdio.h

//返回两个数中较大的一个

intmax(inta,intb){

returnaba:b;

//返回两个数中较小的一个

intmin(inta,intb){

returnaba:b;

intmain(){

intx,y,maxval,minval;

int(*arr[2])(intx,inty)={max,min};

printf("Inputtwonumbers:");

scanf("%d%d",x,

maxval=arr[0](x,y);

printf("Maxvalue:%d\n",maxval);

minval=arr[1](x,y);

printf("Minvalue:%d\n",minval);

return0;

}

运行结果:

Inputtwonumbers:58

Maxvalue:8

Minvalue:5

int(*arr[2])(intx,inty)={max,min}定义的是一个指针函数数组,数组两个元素分别为函数max和函数min的地址,调用数组arr元素实际就调用了对应函数,这一点始终没变。

2.指针函数

2.1概念定义

指针函数是非常常见的,它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

例如:int*fun(x,y);其结构为类型标识符函数名(参数)

fun是一个函数,只是返回值是一个int型的指针,如果不加,它依然是一个函数,只是返回值是一个int整型数。

2.2调用方法

#includestdio.h

//返回两个数中较大的一个

int*max(int*a,int*b){

int*ptr;

ptr=*a*ba:b;

returnptr;

intmain(){

intx,y,*maxval;

printf("Inputtwonumbers:");

scanf("%d%d",x,

maxval=max(x,

printf("Maxvalue:%d\n",*maxval);

return0;

}

运行结果:

Inputtwonumbers:58

Maxvalue:8

int*max(int*a,int*b)为指针函数,它与普通整型函数或字符型函数并没很大区别,只是函数返回为指针ptr。

3.总

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论