正常情况下,指针指向的是整型,字符,数组等;而函数指针也一样,是指向函数的指针变量。
因此函数指针本质上还是指针,只不过指向的对象从我们常见的数组等变成了函数
表示方法
- int add(int x); //定义
- typedef int (*Node)(int); //指针 //类型名:Node
- Node m=add; //赋值
- 运用指针函数时,需要保证指针的格式和函数的格式一样,才能调用
- (比如:函数是int A(int a,int b);则指针为typedef int (*Node)(int ,int); 函数是int A(int a);则指针为typedef int (*Node)(int ,);)
如下代码所示:
#include<iostream>
using namespace std;
int add(int a, int b)
{
a += b;
return a;
}
int dele(int a, int b)
{
a -= b;
return a;
}
int main()
{
typedef int(*Node)(int, int);
Node bb = add; //第一种
cout << bb(1, 2) << endl;
Node cc = dele; //第二种
cout << cc(1, 2) << endl;
system("pause");
return 0;
}
上面通过定义,指针分别指向了两个函数,add和dele,则此时指针便可替代函数,直接使用。
再看指针函数数组
#include<iostream>
using namespace std;
int add1(int a, int b) //加法
{
a += b;
return a;
}
int add2(int a, int b) //减法
{
a -= b;
return a;
}
int add3(int a, int b) //乘法
{
a = a*b;
return a;
}
int add4(int a, int b) //除法
{
a = a/b;
return a;
}
int main()
{
typedef int(*Node)(int, int);
Node ff[]{add1,add2,add3,add4}; //函数指针数组
for (int i = 0; i < sizeof(ff) / sizeof(ff[0]); i++)
{
cout << ff[i](1,2)<<endl;
}
system("pause");
return 0;
}
上面定义了四个结构相似的函数,然后定义一个函数指针数组来保存四种函数。
然后通过数组中的四次调用得到最终函数指针结果;