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;
}
相關文章
相關標籤/搜索