C++把函数名做为参数传递给函数

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

1.函数指针函数

函数指针声明以下:spa

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;//使用函数指针指向一个函数,此处是函数名

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

 

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

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

 

3.函数指针做为函数参数传递排序

函数A做为参数传递给函数B时,函数B声明以下:class

int A(int a,int b);gc

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

函数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;
}
相关文章
相关标签/搜索