函数指针
- 定义
指向函数地址的指针
函数地址:存储函数机器语言代码的内存的开始地址
-
获取函数的地址
使用函数名即可(不带()
) -
声明函数指针
必须指定函数的 返回类型 以及函数的 特征标 (参数列表)
double pam(int)
=>double (*pf) (int)
()
的优先级比*
高
- 可以在声明的时候初始化:
double (*pf) (int) = pam
注意参数列表的坑:指针与数组是等价的
- 通过指针调用函数
通过*
调用即可
double y = pf(2)
恶心的一点:
pf
等价于(*pf)
()
的优先级比*
高
- 函数指针数组
例子:const double * (*pa[3]) (const double *, int) = {f1,f2,f3}
注意
[3]
在pa
后面
pa
是指向这个数组的指针
[]
的优先级比*
高
调用方式:pa[i](0.1, 3)
恶心的一点:
pa[i](0.1, 3)
等价于(*pa[i])(0.1, 3)
- 使用 typedef 简化
这个东西很棒
下面的示例将p_fun
作为一个类型的别名,这个类型为一个函数族
typedef const double * (* p_fun) (const double, int);
声明函数指针的时候很方便:
p_fun pa[3] = {f1,f2,f3};
p_fun (*pd)[3] = &pa;