语法
-
获取函数的地址
函数名即为函数的地址,在传参的时候注意不要加上括号和参数。 -
声明函数指针
和声明函数原型,很像。
int f(int,double);
int (*pf)(int,double); // 注意要 (*pf),运算符的优先级
- 使用指针来调用函数
int (*p)(int);
int x1 = p(1);
int x2 = (*p)(1); //更好
- 使用
typedef
来简化
typedef int* (*P)(int,int);
int* f(int a,int b){
}
P p = f;
书上的例子
const double* f1(const double *,int );
auto p1 = f1;
什么意思呢,一个接受double类型常指针和一个int参数返回double型常指针的函数,然后将f1(函数地址,这是个常量)赋值给函数指针变量p1。(auto
关键字自动推断类型,注意不是动态类型)
如何声明一个 函数指针的数组呢?注意3的位置。
const double* (*pa[3])(const double *,int);
再来一个更复杂一点的例子:
const double* (*(*pd)[3])(const double *,int);
含义是pd是一个指向包含3个元素的数组的指针,数组里面放的是3个函数指针,而函数的返回类型的double型常指针。