c++函数指针

说一说c++函数指针

c++函数指针是c++函数的重要部分。与数据项相似,函数也有地址。函数的地址是存储其机器代码的内存的起始地址。可以编写将另一个函数的地址作为参数的函数。这样第一个函数能够找到第二个函数。

函数指针的基本知识:

1.获取函数的地址:

获取函数的地址很简单,函数名就是函数的地址。

2.声明函数指针

声明指向某种数据类型的指针时,必须指定指针指向的类型。类似,声明指向函数的指针时,必须指定指针指向的函数类型。这意味着应指定函数的返回类型以及函数的特征标(参数列表),也就是说应该像函数原型那样指出有关函数的信息。

例如函数原型   double fun(int a,int b),正确的指针类型 double (*pfun)(int ,int ),这与前者相似,就是将(*pfun)替换为fun,*pfun为函数,所以pfun是函数指针。

3.使用指针调用函数

double fun(int);

double (*pfun)(int);

pf=pam;

double x=fun(4);

double y=(*pfun)(5);

历史与逻辑:

为什么fun与*pfun等价呢?一种学派认为,由于fun是指针,而*pfun是函数,因此应将(*pfun)()用作函数调用;另一种学派则认为,由于函数名是指向函数的指针,指向函数的指针的行为应与函数名相似,因此应将pfun用作函数调用使用。c++进行了折衷,都是允许的。

深入研究函数指针:

函数指针的表示有可能特别恐怖,下面是一些相同函数的原型,他们的参数和返回类型完全相同

const int *f1(const int ar[],int n)

const int *f2(const int [],int );

const int *f3(const int *,int );

接下来声明一个指向这三个函数的指针,假定名字为pf,则只需要将目标函数原型中的函数名替换为(*pf)即const int *(*pf)(const int*,int);

同时,可进行初始化 const int *(pf)(const int *,int )=f1;

函数指针数组:

const int*(*pf[3])(const int *,int )={f1,f2,f3);声明并初始化了函数指针数组;

 

posted @ 2017-06-28 10:20  傻蜗牛  阅读(710)  评论(0编辑  收藏  举报