函数指针是一个指针,定义方法,如:
int (*pFunc)(int x, int y);
用法:
1、将函数地址赋值给函数指针变量,通过函数指针执行函数
int func_a(int x, int y):
int func_b(int x, int y):
pFunc = func_a;
pFunc(2, 3); //执行函数func_a
pFunc = func_b;
pFunc(2, 3); //执行函数func_b
2、作为函数的参数,这时叫回调函数,如
int func(int (*pFunc)(int x, int y), int u);
3、定义函数指针数组,不同数组的元素赋值不同的函数,这样通过函数指针数组下标执行不同的函数
int (*pFunc[])(int x, int y):
pFunc[0] = func_a;
pFunc[1] = func_b;
代码示例:
#include
int func_add(int x, int y)
{
return(x+y);
}
typedef int (*pFunc)(int x, int y);
int test_func_1(int t_x, pFunc pCallbackFunc)
{
int var_int;
var_int = pCallbackFunc(2, 3);
printf("test_func_1->pCallbackFunc: %d\n", var_int);
var_int = t_x + var_int;
printf("test_func_1: %d\n", var_int);
return 0;
}
int test_func_2(int t_x, pFunc pCallbackFunc)
{
int var_int;
var_int = pCallbackFunc;
printf("test_func_2->pCallbackFunc: %d\n", var_int);
var_int = t_x + var_int;
printf("test_func_2: %d\n", var_int);
return 0;
}
int test_func_3(int t_x, pFunc pCallbackFunc, int pFunc_x, int pFunc_y)
{
int var_int;
var_int = pCallbackFunc(pFunc_x, pFunc_y);
printf("test_func_3->pCallbackFunc: %d\n", var_int);
var_int = t_x + var_int;
printf("test_func_3: %d\n", var_int);
return 0;
}
int main(int argc, char *argv[])
{
//回调函数参数传递方法1:只传递函数指针,函数参数在函数内部指令
test_func_1(1, func_add);
//回调函数参数传递方法2:通过回调函数参数传递
test_func_2(1, func_add(2, 3));
//回调函数参数传递方法3:通过调用的函数参数传递
test_func_3(1, func_add, 2, 3);
exit(0);
}