以下内容参考C++ Primer Plus第六版
有了这个东西估计很多操作会方便很多.int* sort_2(int *begin, int *end) { sort(begin, end); return begin;}int* sort_1(int *begin, int *end) { sort(begin, end, greater () ); return begin;}int make_seq(int* (*f)(int*, int*), int *n, size_t len) { int first = *((*f)(n, n + len)); for (int* i = n; i != n + len; i += 1) printf("%d ", *i); puts(""); return first;}int main () { int A[5] = {0, 3, 2, 5, 1}; auto f1 = sort_1, f2 = sort_2; printf("%d\n", make_seq(f1, A, 5)); printf("%d\n", make_seq(f2, A, 5)); return 0;}
一个比较简单的例子, 大概是包含了函数指针基本的使用吧.
声明及赋值
声明一个返回值为const int*
参数为(int *, int *)
标示符为f
的函数指针
const int* (*f)(int *, int *)
当然赋值时可以这样做:
const int* func(int * a, int *b) { // 一个函数}const int* (*f)(int *, int *) = func;
当然可以使用c++11
的自动类型推断
auto f = func;
调用
在一个函数中使用它
int func(const int *(*f) (int *, int *), int *begin, int *end) { f(begin, end); //或者 (*f)(begin, end);}
虽然根据我们对指针的认识, 下面的那个代码应该是正确的才对, 但是C++标准都允许.
显然是上面的方式更好写一些.函数指针数组
其实和普通的指针数组差不多
auto f1 = sort_1, f2 = sort_2; int* (*f[2])(int *, int *) = {sort_1, sort_2}; printf("%d\n", make_seq(f[0], A, 5)); printf("%d\n", make_seq(f[1], A, 5));
用typedef
进行简化
typedef const int *(*func)(int *, int *);func a, b, c[3];