函数指针
| #include <iostream>
using namespace std;
int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
int mul(int a,int b){return a*b;}
int cal(int a,int b,int (*f)(int,int)){
return f(a,b);
}
int main(){
typedef int (*FuncPtr)(int,int);
FuncPtr funcs[3]={add,sub,mul};
int a,b;
cin>>a>>b;
for(int i=0; i<3; i++){
cout<<cal(a,b,funcs[i])<<' ';
cout<<funcs[i](a,b)<<' ';
}
}
|
直接定义函数指针变量用int (*变量名)(形参表)
| int max(int a,int b){...}
int min(int a,int b){...}
int main(){
int (*fp)(int,int);
fp=max;
cout<<fp(1,5)<<endl;
fp=min;
cout<<fp(1,5)<<endl;
}
|
函数指针变量实际上是函数入口的地址,所以可以用函数指针作为参数,把一个函数作为参数传进另一个函数,以供调用;另外,函数名就是指向这个函数的指针,所以可以直接传入函数名作为实参
| int cal(int a,int b,int (*f)(int,int)){
return f(a,b);
}
int main(){
cout<<cal(1,5,max);
}
|
如果想定义类型为函数指针的数组,不能使用int (*fp)(int,int)[5]={...},要用typedef给函数指针起一个别名,之后再定义数组
| typedef int (*FuncPtr)(int,int);
Funcptr fptrs[4]={max,min,add,NULL};
for(int i=0; i<3; i++){
//以下两句等效
cout<<fptrs[i](1,5)<<endl;
cout<<cal(1,5,fptrs[i])<<endl;
}
|