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,参数列表为 int,int
pfun = add;//使用函数指针指向一个函数
注意:函数指针的参数类型和返回类型必须与指向的函数参数类型返回类型一致
2.使用函数指针代替函数使用
int res = pfun(1,2);
//使用函数指针调用函数add,相当于int res = add(1,2);
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;
}