• C++ 函数指针


    以下内容参考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
    ", make_seq(f1, A, 5));
    	printf("%d
    ", 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
    ", make_seq(f[0], A, 5));
    	printf("%d
    ", make_seq(f[1], A, 5));
    

    typedef进行简化

    typedef const int *(*func)(int *, int *);
    
    func a, b, c[3];
    
  • 相关阅读:
    linux shell 获取文件夹全文绝对路径
    Selenium自动化获取WebSocket信息
    Automatically generating nice graphs at end of your Load Test with Apache JMeter and JMeter-Plugins
    卡夫卡与风暴:卡夫卡和风暴的明智比较
    Apache Kafka安全| Kafka的需求和组成部分
    Kafka Schema Registry | 学习Avro Schema
    QT 内部使用函数列表
    QT图标添加
    QT快捷键
    QT软件上架以及自启动
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/9839502.html
Copyright © 2020-2023  润新知