下面是一些函数的原型,这些函数的特征标看似不同,但实际上相同。
const double * f1(const double a[], int n); const double * f1(const double [], int n); const double * f1(const double *, int n);首先参数列表const double a[]与const double *a的含义完全相同,其次,在函数原型中可以省略标识符,(定义函数的时候不可省略标识符)。因此三者相同。
只需将目标函数原型中的函数名替换成(*func) 即可。 const double * (*func)(const double a[], int n); 初始化:func=f1;
更加复杂的函数声明
函数指针数组 const double * (*func[3])(const double a[], int n);
指向函数指针数组的指针 const double * (*(func)[3])(const double a[], int n); 上式就是 const double * (((*func)[3]))(const double a[], int n);其中(*func)[3])是一个指向一个含有三个元素的数组的指针,外面加一个星号表示为函数指针。
声明函数指针的类型是括号里面的内容,括号外面的星号是函数的返回值得类型
使用typedef typedef const double * (*func)(const double a[], int n); 则可用func来初始化 func=pa[3]; 函数指针数组 func=(*pa)[3]; 指向函数指针数组的指针用typedef来声明函数指针可以看做就是用pa[3]来替换func,同样(*pa)[3]来替换func。
