函数指针,顾名思义,首先,它是一个指针,其次,该指针指向一个函数。其作用,一般有两个,一是调用函数,二是做函数的形参。
函数指针
下面是一个函数声明:
int add (int a,int b);
而函数指针则为:
int (*add)(int a,int b);
需要注意的是第一,括号必须加括号,将函数名与指针结合在一起,否则是指针函数;第二,指针函数的声明和调用,类型必须一致。
一个示例如下:
#include <stdio.h>
int add(int a,int b)
{
return a+b;
}
int main()
{
//函数指针的定义与初始化
int (*funptr)(int,int) = add;
//调用函数指针
int sum = funptr(2,4);
printf("%d",sum);
return 0;
}
函数指针数组
函数指针数组,是以数组的形式,对函数指针进行组织,一般有两种方法。
第一:类似于数组的方式直接定义
#include <stdio.h>
int add(int a,int b)
{
return a+b;
}
int minus(int a,int b)
{
return a-b;
}
int main()
{
int a,b;
//类似于数组的方式直接进行定义
int (*funptr[])(int,int) ={add,minus};
a = (funptr[0])(2,4);
b = (funptr[1])(2,4);
printf("%d,%d",a,b);
return 0;
}
方法二: 借助于typedef
#include <stdio.h>
#include <stdlib.h>
#include <others.h>
#include <sort.h>
int add(int a,int b)
{
return a+b;
}
int minus(int a,int b)
{
return a-b;
}
//声明一个函数指针数组
typedef int (*funptr[])(int,int);
int main()
{
int a,b;
//定义函数指针数组,funptr已经为数组类型,此时fpt不能定义为
//fpt[],会报错
funptr fpt ={add,minus};
a = (fpt[0])(2,5);
b = (fpt[1])(2,5);
printf("%d,%d",a,b);
return 0;
}