函数指针
首先要知道函数指针是个啥,才好理解回调函数。
int func1(int a, int b)
{
return a + b;
}
void test01()
{
//定义函数类型
typedef int(my_func)(int, int);
//定义函数指针
cout << func1 << endl; //002E1604
my_func* pFunc = func1; //func1代表地址
cout << pFunc << endl; //002E1604
int result = func1(10, 20);
int resultp = pFunc(10, 20);
cout << (*pFunc) << endl; //这个也是002E1604 这个就很费解。
//我后来想了想,func是函数的地址,也是输出func的时候,输出的内容,
//因为也没法输出整个函数嘛。
//这里的输出的情况和普通的int型指针关于这三者的输出是不一样的。
//不过一样的地址才可以解释下面的这句话。
int resultp2 = (*pFunc)(10, 20);
printf("%d,%d,%d\n", result, resultp, resultp2); //输出都是30.
//接着直接定义函数指针类型
typedef int(*my_pfunc)(int, int);
my_pfunc pFunc2 = func1;
printf("%d\n", pFunc2(10, 20));
//接着直接定义函数指针变量
int(*my_func_p)(int, int) = NULL;
my_func_p = func1;
printf("%d\n", my_func_p(10, 20));
}
作为形参时。
int add3(int a, int b)
{
return a + b - 10;
}
//函数指针作为另外一个函数的参数
void test02(int(*pAdd)(int, int)) //表示一个函数指针变量 pAdd
{
int a = 100;
int b = 200;
int result = pAdd(a, b); //这个的pAdd在实际执行时,会得到add3的值,即地址。
printf("result = %d\n", result);
}
//调用
test02(add3);
以上是我以前写的一份讲解指针知识里面的一部分,我觉得对函数指针讲的很清楚。
想一下子弄懂结构体 指针 数组 函数 等等之间的各种组合体嘛。比如 函数指针、指针数组等等。
看我的这两篇文章吧。
关于指针的知识回顾
把数组、结构体等都看成是一种数据类型!
回调函数
就是把函数名作为参数传递。函数名就是地址。前面提到的。
上面的例子中的test02(add)就是回调函数的一个例子,实际运行的时候,test02会调用add3()函数。