函数指针的定义形式
返回类型*(函数指针名)(函数参数1,函数参数2,....)
类的函数指针定义方式
返回类型*(类名::函数指针名)(函数参数1,函数参数2,....)
or typedef 返回类型*(函数指针名)(函数参数1,函数参数2,....)
函数指针用途可以分为两类:
1.作函数指针使用
// ....省略头文件
int fun(int a, int b)
{
return a +b;
}
void fun_1(int a,int b)
{
a = a + b;
b = a -b;
}
// fun
int *(pFun)(int,int) = NULl;
pFun = fun;
int num = pFun(1,2);
num = (*pFun)(1,2); //等同上面
// fun_1
int a = 1,b = 2;
int *(pFun_1)(int,int) = &fun_1;
(*pFun_1)(a,b);
//省略代码......
1.1作类的函数指针使用
// 省略头文件
class number
{
public:
int fun(int a)
{
return a;
}
int fun_1(int a,int b) const
{
a = a + b;
b = a - b;
}
static int fun_2(int a, int b)
{
return a - b;
}
}
int main()
{
number nmb;
// 普通成员函数
int (number::*pFun)(int) = &number::fun;
(nmb.*pFun)(2)
// constc 成员函数
int (number::*pFun_1)(int, int) const = &number::fun_1;
(nmb.*pFun_1)(1,2);
//静态成员
int (*pFun_2)(int a,int b) = &number::fun_2; //&可加可不加
(number.*pFun_2)(1,2);
}
// 省略下面
2.作为形参
// 省略头文件
void fun(int a,int b)
{
a = a+1;
b = a+b;
}
void fun_1(void (*pFun)(int,int),int n)
{
int z = 0;
pFun(z,n);
}
void main()
{
fun_1(fun,3);
}
3.用typedef简化
// 省略头文件
typedef void (*pFun)(int,int)
void fun(int a,int b)
{
a = a+1;
b = a+b;
}
void main()
{
pFun pfun = &fun;
pfun(1,2);
}