C++中的回调函数,函数指针理解

来源:互联网 发布:不喝牛奶 知乎 编辑:程序博客网 时间:2024/04/30 11:29

小知识:C和C++中struct 的区别就是C中的struct不能有成员函数,C++中可以有。
C++中可以通过类实例化对象来调用成员函数,在C语言中,就可以用函数指针来调用回调函数。
函数指针:函数指针就是指向一个函数,存储的是那个函数的地址
回调函数:就是通过函数指针来调用函数指针指向的函数。

#include <iostream>#include <stdlib.h>using namespace std;int max(int x, int y){    return x > y ? x:y;}void main(){    int j;    int(*p)(int, int);//说明:指向函数的指针变量的一般形式:数据类型 (*指针变量名)(函数参数列表)    int a = 10, b = 100, c;    p = &max;//p= max的作用是把max函数的入口地址赋值给变量 p. 函数名代表首地址。这时候就是指向函数的指针变量。    //p=max也可以    c = (*p)(a, b);//函数指针调用函数    cout << c << endl;    system("pause");}

就是这样,下面一个代码例子能更加说明回调函数的用法。

#include <iostream>using namespace std;int main(){    void caller(void(*) ()); //函数声明,注意这里的格式    void func(); //函数声明    void(*p) (); //定义指针变量,注意格式,后面一个括号是被调函数的参数类型    p = func; //指针变量赋值    caller(p); //回调,通过指针p指向函数func的首地址,去访问内存中为函数分配的内存空间。}//回调函数void caller(void(*fnp) ()){    printf("调用成功\n");    fnp();}//被调函数void func(){    printf("回调成功\n");}
0 0