码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 函数指针

时间:2018-10-23 23:00:32      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:.com   c++11   def   image   img   c++   ret   c++ prime   函数   

以下内容参考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<int> () );
    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];

C++ 函数指针

标签:.com   c++11   def   image   img   c++   ret   c++ prime   函数   

原文地址:https://www.cnblogs.com/qdscwyy/p/9839502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!