zoukankan      html  css  js  c++  java
  • 函数指针做函数参数

      现以add函数为例,如下:

    int add(int a,int b){
        printf("func....add:%d
    ",(a+b));
        return a+b;
    }
    

     通常定义一个函数指针类型,按如下格式即可调用:

    typedef int (*MyFuncType)(int a,int b); //定义一个函数指针类型
    MyFuncType myFuncType=add;
    cout<<myFuncType(2,4)<<endl;
    

     或者直接定义一个函数指针

    int (*p)(int a,int b);    //定义一个函数指针
    p=add;
    cout<<"调用函数指针:p : "<<p(4,5)<<endl;
    

     在对比了函数指针的特性时,会发现,定义一个函数指针类型的过程比定义一个函数指针要复杂的多。但是在编写代码的时候,就会发现函数指针类型的强大作用。

    #include"iostream"
    using namespace std;
    /*
     * 函数指针类型起到的作用
     *      把函数的参数、函数的返回值提前做了约定。
     * 以达到任务的调用者与任务的实现者达到解耦合
     */
    //子任务的执行者
    int add(int a,int b){
        printf("func....add:%d
    ",(a+b));
        return a+b;
    }
    int sub(int a,int b){
        printf("func....sub:%d
    ",(a-b));
        return a-b;
    }
    int mut(int a,int b){
        printf("func....mutiply:%d
    ",(a*b));
        return a*b;
    }
    
    //定义一个函数指针类型
    typedef int(*MyFuncType)(int a,int b);
    
    //函数指针做函数参数     间接调用
    int function1(MyFuncType myFunctionType,int x,int y){
        myFunctionType(x,y);
    }
    int function2(int (*MyFuncType2)(int a,int b),int x,int y){
        int ret=MyFuncType2(x,y);
        return ret;
    }
    
    int main(){
        /*
        MyFuncType myFuncType = NULL;
        myFuncType=add;
        myFuncType(1,2);
        */
        //函数指针作为参数
        function1(add,8,8);
        function1(sub,8,8);
        function1(mut,8,8);
        function2(add,8,8);
        function2(sub,8,8);
        function2(mut,8,8);
        return 0;
    }
    

     从中可以发现,一旦函数过多时,我们可以将函数的实现与函数的调用者分离,使得开发具有逻辑性,同时这也体现了类似多态的特性。

  • 相关阅读:
    块结构在文件中的表示IOB【转载】
    LSTM输入层、隐含层及输出层参数理解【转载】
    L3-002 特殊堆栈 (30 分) 模拟stl
    L1-006 连续因子 (20 分) 模拟
    L2-014 列车调度 (25 分)
    L3-021 神坛 (30 分) 计算几何
    P1156 垃圾陷阱 DP
    P1063 能量项链 区间dp
    P1040 加分二叉树 区间dp
    P1605 迷宫 dfs回溯法
  • 原文地址:https://www.cnblogs.com/helloworldcode/p/9333056.html
Copyright © 2011-2022 走看看