zoukankan      html  css  js  c++  java
  • C++把函数名作为参数传递给函数

    C++把函数A作为参数传递给另外函数B时,实际上是把函数A作为指针传递给另外的函数B,这就涉及到了函数指针。

    1.函数指针

    函数指针声明如下:

    return_type (*p_name)(arg_list);
    //表示返回值为return_type,参数列表为arg_list的函数指针p_name.

    例如:

    //定义一个函数
    int
    add(int a,int b) { return a+b; }
    int (*pfun)(int,int);//声明一个函数指针
    pfun = add;//使用函数指针指向一个函数,此处是函数名

    注意:函数指针的参数类型和返回类型必须与指向的函数参数类型返回类型一致

    2.使用函数指针代替函数使用

    int res = pfun(1,2);//使用函数指针调用函数add

    3.函数指针作为函数参数传递

    函数A作为参数传递给函数B时,函数B声明如下:

    int A(int a,int b);

    B(arg_list,int (*pA)(int, int));

    函数B调用如下:

    B(...,A);

    例子:

    int CmpAsc(int x, int y)
    {
        //如果x>y返回1,否则返回0;
        if(x>y)return 1;
        else return 0;
    }
    void sort(int a[], int n, int (*cmp)(int,int))//最后一个参数为函数指针类型参数
    {
        /*对数组a排序,排序原则由cmp指定,若cmp为真,表示两元素逆序*/
        for(int i=0;i<n-1;i++)
            for(int j=i+1;j<n;j++)
                if(cmp(a[i],a[j]))//调用传进来的函数指针
                    swap(a[i],a[j]);
    }
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        
        int a[6] ={8,2,1,3,4,5};
        sort(a, 6, CmpAsc);//CmpAsc函数名作为参数传递给函数sort
        for(auto &e:a)
            cout<<e<<" ";
        return 0;
    }
  • 相关阅读:
    PCL中分割_欧式分割(1)
    如何在ROS中使用PCL(2)
    PCL超体聚类
    PCL常见错误集锦
    cv_bridge中的编码模式与实现
    Centos 安装配置gerrit
    git merge git pull时候遇到冲突解决办法git stash
    Python 虚拟环境:Virtualenv
    配置gitlab gerrit jenkins
    selinux开启关闭
  • 原文地址:https://www.cnblogs.com/jainszhang/p/10704514.html
Copyright © 2011-2022 走看看