函数指针
1.声明函数指针
int (*p1)(int);
//传入int类型参数,返回int类型
double* (*p2)(int,char)
//传入int,char,返回double *
int max(int x,int y)
{
return x > y ? x : y;
}
int main()
{
int (*p)(int, int)=&max;
int b=p((1,2),3);
printf("%d\n",b);
return 0;
}
上述函数指针p指向了函数max,所以p((1,2),3)
相当于max((1,2),3)
2.声明函数指针类型
typedef int (*P)(int,int);
代码示例:
int max(int x,int y)
{
return x > y ? x : y;
}
int main()
{
typedef int (*P)(int,int);
P q;
q=max;
int b=q((1,2),3);
printf("%d\n",b);
return 0;
}
3.传递函数指针(回调函数)
代码示例:
int max(int x,int y)
{
return x > y ? x : y;
}
int min(int x,int y)
{
return x > y ? y : x;
}
typedef int (*P)(int, int);
int result(P q,int num1,int num2)
{
return q(num1,num2);
}
int main()
{
printf("%d\n",result(max,1,2));
printf("%d\n",result(min,1,2));
return 0;
}
使用函数指针可以使代码变得更加灵活。
4.函数指针数组
代码示例:
int max(int x,int y)
{
return x > y ? x : y;
}
int min(int x,int y)
{
return x > y ? y : x;
}
typedef int (*P)(int, int);
P q1[128]={NULL};
int result(char opt,int num1,int num2)
{
P q2;
if(opt=='>')
{
q1[opt]=max;
}
else if(opt=='<')
{
q1[opt]=min;
}
q2=q1[opt];
return q2(num1,num2);
}
int main()
{
printf("%d\n",result('>',1,2));
printf("%d\n",result('<',1,2));
return 0;
}