说一说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);声明并初始化了函数指针数组;