精华内容
下载资源
问答
  • 函数指针与回调函数

    2014-04-14 00:50:50
    大家好,今天带给大家的是函数指针与回调函数。这篇文章也许你随眼飘过感觉没什么用,但是当你以后查找类似资料的时候,没有看见这篇菜菜写的文章就默默后悔吧。 在很多很好的代码注释中指名使用了回调函数,但是...

    函数指针与回调函数

    大家好,今天带给大家的是函数指针与回调函数。这篇文章也许你随眼飘过感觉没什么用,但是当你以后查找类似资料的时候,没有看见这篇菜菜写的文章就默默后悔吧。

    在很多很好的代码注释中指名使用了回调函数,但是这么高深的东西很难让我们这些菜鸟们懂。于是乎,小殇翻看了很多很多云里雾里的东西,弄点最简单易懂的带给大家。

    先讲函数指针(指针函数是返回值指针的函数,不一样哦),指针大家都接触过,指向变量,数组,字符,函数指针当然就是指向函数了。来一段百度百科的例子:


    
    #include<stdio.h>
    int max(int x,int y){ return(x>y?x:y); }
    int main()
    {
        int (*ptr)(int, int);
        int a,b,c;
        ptr=max;
        scanf("%d%d",&a,&b);
        c=(*ptr)(a,b);
        printf("a=%d,b=%d,max=%d",a,b,c);
    }

    上述例子很简单啦,就是先定义一个max函数,然后在主函数中声明一个函数指针,由于ptr代表函数的首地址,因此ptr=max后,指针ptr就指向max函数的首地址。自然就可以进行调用了。(PS:这里的指针不要乱++和--哈。数组指针知道下一个是什么,你函数指针知道麽?)
    函数指针只是回调函数的基础,让小殇带领大家来说说回调函数。先来看官方解释:
    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
    我不知道大家怎么理解的,至少我看了好多文章真的是迷茫惘然了一阵,因为说的很多就不一样,完全没看懂回调是什么。比如下面是某博客写的一个最简单的回调函数。很多博客有类似的简单代码,其实我不想说下面代码中有多么误导读者了,因为下面代码那么多perfect,大家表明看懂了,实际懂毛了。
    
    #include<stdio.h>
    #include<stdlib.h>
    void perfect(int n)
    {
     int i=1;
        int count=0;
     for(i=1;i<n;i++)
     {
         
      if(0==n%i)
      {
       count+=i;
      }
     }
     if(count==n)
      printf("%d是完数\n",n);
     else printf("%d不是完数\n",n);
    }
    void myCallback(void (*perfect)(int ),int n)
    {
     perfect(n);
    }
    
    
    int main()
    {
     int n;
     printf("请输入一个正整数\n");
     scanf("%d",&n);
     myCallback(perfect,n);
     return 0;
    }

    为了让大家看懂点很多博文列举的大概意思,我自己写了个类似的代码。就是下面的代码啦。(当然这依旧不是我心目中的回调函数。当然,这是一些博文没表达清楚的意思。)下面的代码主函数里注册了回调函数callback(521, miss1)及  callback(125, miss2),当然调用了函数callback(int times, void (* name)(int))执行,其中miss1和miss2就是函数指针,通过变成name()的方式相信大家一眼就懂了,name也是指针,调用这个函数时name指针就指向miss1的地方,然后就调用miss1函数。这个函数是解释清楚了,但是我认为这不是真正的回调函数,因为这是实现方直接调用的,而不是在特定的事件或条件发生时由另外的一方调用的。
    
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    void miss1(int len)
    {
           printf("I miss you。%d \n", len);
    }
    void miss2(int len)
    {
           printf("Do you miss me?125\n", len);
    }
    void callback(int times, void (* name)(int))
    {
          name(times); 
    }
    int main(void)
    {
           callback(521, miss1);
           callback(125, miss2);
    	   system("pause");
    }


    笔者认为的回调函数是这样的(虽然木有给出代码,而且仅为个人观点,但是最终解释权归笔者哈),系统需要调用函数,但是需要不知道用户哪种需求啊,所以类似接口的意思,提前注册好了函数,类似callback(*name),然后当系统执行到某一程度了,就会调用name();函数,但是这个name函数是什么,系统也不知道啊,所以,交给你去处理了。然后用户就可以在这个时候进行一系列处理。类似中断的意思,我的API函数遇到某种情况就中断,比如某种时钟函数,每一分钟我中断一次,你用户有什么事情调用你的函数处理吧。也就类似消息通知函数,比如我系统到某个程度(用户看资料应该知道发生什么了),就通知你下,然后你处理消息吧,该干什么干什么,处理完了系统继续干。
    好吧,满篇的大白话,果断没有专业术语,因为专业术语太高端,一点也不接地气,我们要走的是群众路线哈。
    在此发句牢骚,特别无奈那些拿着网上资料到处复制来复制去骗积分之类的,因为你首先不知道来源的正确性,有时候漫天的错误很容易误导菜菜的,其次那么多雷同的网站往往让人很难找到新的信息看法,比如这篇文章就可能会淹没在无数雷同的类似文章中。支持原创,却不支持漫天复制赚积分。(今天还碰到恶毒的,把一个在相关资料上很常见的代码分成几个文件发到pudn上,真的太太太无耻了!)
    吼吼,自己的第二篇博客,原创哦,消耗了大量珍稀时间,希望大家能够喜欢,希望能帮助到有用的人。
    展开全文
  • 函数指针与回调函数详解

    千次阅读 多人点赞 2016-09-29 14:08:30
    函数指针与回调函数详解1.什么是函数指针函数指针就是指针。这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址。这类似于数组名就是数组的首地址。我们可以通过反汇编直观的查看到函数名和函数地址...

    函数指针与回调函数详解

    1.什么是函数指针?

    函数指针就是指针。这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址。这类似于数组名就是数组的首地址。我们可以通过反汇编直观的查看到函数名和函数地址的关系。

    080483c4 <rfun>:
     80483c4:       55                      push   %ebp
     80483c5:       89 e5                   mov    %esp,%ebp
     80483c7:       83 ec 28                sub    $0x28,%esp
     ······
     80483f3:       e8 cc ff ff ff          call   80483c4 <rfun>
     ······
    

    第一行080483c4就是函数在内存中的地址,后面的 rfun 就是函数名,还可以看出第二行和第一行的地址相同,所以可以知道函数名就是该函数的入口地址。
    第6行的call 80483c4 rfun就是再次调用这个函数,回到这个函数的入口出执行,可以看出该函数是一个递归函数。

    2.函数指针的使用

    2.1调用函数

    我们就用函数指针调用刚才的rfun函数。

    int rfun(unsigned x);//函数的声明
    

    通过函数的声明,可以得到rfun函数的返回值类型,参数类型和参数个数。这些都是定义指针函数的必要条件!既然函数名就是函数地址,我们就可以用一个指针指向它,函数指针如下:

    int (*pfun)(unsigned);//函数指针的定义
    pfun = rfun;//函数指针的初始化
    

    pfun就是指针变量,可以直接用函数名rfun赋值给pfun这个指针。函数指针在调用时和函数调用一致,只是用指针代替了函数名。

    pfun(x);//函数指针的调用
    

    函数指针不能做自增和自减操作,否则程序会崩溃。

    2.2作为函数的参数

    函数指针作为A函数的参数,A函数称为回调函数。A函数的定义为:

    int rfun_call(int (*pfun)(unsigned), unsigned x)
    {
        return pfun(x);
    }
    

    这个函数的第一个参数是一个返回值为int类型,参数为一个且是unsigned类型函数的指针,第二个参数是 unsigned类型。

    3.什么是回调函数?

    回调函数(Callback Functions)就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。刚才的rfun_call就是一个回调函数。这个函数是自己写的,下面就用系统感受一下的回调函数。

    先说明两个Linux系统函数,一个是alarm函数,一个是signal函数

    ①alarm函数,也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它向进程发送SIGALRM信号。

    #include <unistd.h>//alarm的头文件
    unsigned int alarm(unsigned int seconds);//alarm的函数原型
    

    ②signal函数,执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。

    #include <signal.h>//signal函数的头文件
    
    typedef void (*sighandler_t)(int);//sighandler_t是一个指向返回值为void,参数为int的函数指针
    sighandler_t signal(int signum, sighandler_t handler);//signal函数的原型
    

    描述一个场景:
    你要睡觉,只睡2秒,所以你定了一个2秒的闹钟,到第3秒时,闹钟给你发信号,说时间到了

    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    
    void fun(int signum)
    {
         printf("时间到了,起床!\n");
    }
    
    int main()
    {
        int i;
    
        alarm(3);//定2秒闹钟,第3秒会响铃,也就是发信号
        signal(SIGALRM, fun);//接收闹铃的信号,去执行fun()
        for(i = 0; i < 3; i++){
                sleep(1);//描述时间的流逝
                printf("%d秒过去了\n", i+1);
        }
        printf("睡觉结束");
    
        return 0;
    }
    

    执行结果如下:

    [root@menwen-linux test]# ./callback
    1秒过去了
    2秒过去了
    时间到了,起床!
    3秒过去了
    睡觉结束
    

    在时间到第三秒的时候,signal函数执行了fun函数,执行完fun函数,就会继续执行“睡觉结束”。
    如果不设置闹铃(注释alarm(3)),程序就会一直按顺序执行,直到程序结束,永远不会执行回调函数。
    signal函数就是一个回调函数,接收一个函数指针,和一个信号量SIGALRM,在Linux内核代码中,SIGALRM等信号其实是一堆宏定义,都对应一个数值

    #define SIGHUP           1
    #define SIGINT           2
    #define SIGQUIT          3
    #define SIGILL           4
    ......
    #define SIGPIPE         13
    #define SIGALRM         14
    #define SIGTERM         15
    #define SIGSTKFLT       16
    #define SIGCHLD         17
    等等.....
    

    或者命令行输入kill -l 也会对应出现这个信号量。

    [menwen@menwen-linux 6th_day]$ kill -l
     1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
     6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
    11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
    ......
    53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
    58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
    63) SIGRTMAX-1  64) SIGRTMAX    
    

    回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。我们实现了fun函数,而我们不调用该函数,而是去睡觉(或者干其他事),等到时间到,回调函数就会去响应,这是一种系统异步处理的机制。

    最后留下一句话在网上看到的话,如果你看懂了上面这些,这句话你就懂了!

    告诉我一些关于你的事情,在需要的时候我能够找到你。

    展开全文
  • 深入浅出剖析C语言函数指针与回调函数(一)

    万次阅读 多人点赞 2017-03-24 00:19:41
    百度的权威解释如下:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实...

    关于静态库和动态库的使用和制作方法。

    http://blog.csdn.net/morixinguan/article/details/52451612

    今天我们要搞明白的一个概念叫回调函数。

    什么是回调函数?

    百度的权威解释如下:

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应

    那么我们可以来看一个例子:

    #include <stdio.h>
    void print();
    int main(void)
    {
    	void (*fuc)(); 
    	fuc = print ; 
    	fuc(); 	
    } 
    void print()
    {
    	printf("hello world!\n");
    }
    

    从这个例子可以看到,我们首先定义了一个函数指针fuc ,这个函数指针的返回值为void型,然后我们给函数指针赋值,赋值为print,也就是print函数的首地址,此时fuc获得了print的地址,fuc的地址等于print的地址,所以最终调用fuc();也就相当于调用了print();

    么我写的这个例子明显和百度解释的不符合啊?定义是如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数,确实,有所不同,但道理是一样的,我们接下来再来看一个例子。

    #include <stdio.h>
    
    int add_ret() ;
    
    int add(int a , int b , int (*add_value)())
    {
    	return (*add_value)(a,b);
    }
    
    int main(void)
    {
    	int sum = add(3,4,add_ret);
    	printf("sum:%d\n",sum);
    	return 0 ;
    } 
    
    int add_ret(int a , int b)
    {
    	return a+b ;
    }
    

    从这个例子里,我们看到:

    这样子不就符合我们的定义了嘛?我们把函数的指针(地址),这里也就是add_ret,作为参数int add(int a , int b , int (*add_value)()) , 这里的参数就是int(*add_value)() , 这个名字可以随便取,但是要符合C语言的命名规范。当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。我们看到add函数内部,return (*add_value)(a,b) ; 这个(*add_value)(a,b)相当于对指针进行了简引用,我们在main函数中,传入具体要实现功能的函数,add_ret,这个函数很简单,就是实现两数相加并返回,这里刚刚好,简引用,相当于取出指针返回地址里的值,这个值就是return a+b,也就是我们传入a和b两数相加的结果。

     那么,回调函数究竟有什么作用呢?

         说到这里,就有了用户和开发者之间的概念,假设,用户是实现add_ret这个函数,而开发者是实现add这个函数,现在的需求是,用户将add_ret这个函数以参数的形式传入开发者实现的add函数,add函数就会返回一个数字给用户,开发者没必要告诉用户他实现了什么东西,用户也并不知道开发者是怎么实现的,用户只需要传入自己写的函数,便可以得到开发者实现的函数的返回值,开发者可以将内容封装起来,将头文件以及库文件提供给用户。

    接下来,我们用Linux来演示下这个结果,我们在目录下创建三个文件main.c,vendor.c,vendor.h

    main.c是用户开发的。

    vendor.c和vendor.h是开发者实现的。

    在main.c中,代码如下:

    #include <stdio.h>
    #include "vendor.h"
    
    int add_ret(int a , int b)
    {
            return a + b ;
    }
    
    int main(void)
    {
        int sum = add(3,4,add_ret);
        printf("sum:%d\n",sum);
        return 0 ;
    }
    

    vendor.c,代码如下:

    #include "vendor.h"
    int add(int a , int b , int (*add_value)())
    {
            return (*add_value)(a,b);
    }
    

    vendor.h,代码如下:

    #ifndef __VENDOR_H
    #define __VENDOR_H
    
    int add(int a , int b , int (*add_value)());
    
    #endif 
    

     接下来,我们制作一个动态链接库,最终开发者把vendor.c的内容封起来,把vendor.h提供给用户使用。

    #include <stdio.h>
    #include "vendor.h"
    
    int add_ret(int a , int b)
    {
            return a + b ;
    }
    
    int main(void)
    {
        int sum = add(3,4,add_ret);
        printf("sum:%d\n",sum);
        return 0 ;
    }
    


    在linux下制作动态链接库,将vendor.c和vendor.h打包成一个动态链接库

    先明白以下几个命令是什么意思:

    生成动态库:

    gcc -shared -fPIC dvendor.c -o libvendor.so    

    -shared : 生成动态库;

    -fPIC  : 生成与位置无关代码;

    -o               :指定生成的目标文件;

     

    使用动态库:

    gcc main.c -L . –lvendor -o main

    -L : 指定库的路径(编译时); 不指定就使用默认路径(/usr/lib/lib)

    -lvendor : 指定需要动态链接的库是谁;

    代码运行时需要加载动态库:

    ./main 加载动态库 (默认加载路径:/usr/lib /lib ./ ...)

    ./main

    我们将编译动态库生成的libvendor.so拷贝到/usr/lib后,现在就不需要vendor.c了,此时我们将vendor.c移除,也可以正常的编译并且执行main函数的结果,这就是回调函数的作用之一。







    展开全文
  • 上一篇博文的地址:http://blog.csdn.net/morixinguan/article/details/65494239这节,我们来看看函数指针与回调函数在Linux内核中的应用。从上节我们了解到,函数指针回调函数在开发者和用户之间的一个例子,那么...

    上一篇博文的地址:

    http://blog.csdn.net/morixinguan/article/details/65494239

    这节,我们来看看函数指针与回调函数在Linux内核中的应用。

    从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明。

    我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子:

    File_operations文件操作结构体:


    这段代码中,利用结构体的封装思想,将函数指针封装在一个file_operations结构体里,然后,在具体实现驱动的时候,实现具体的函数,再赋值给结构体里的函数指针做好初始化操作,我们来看看友善之臂的led驱动就明白了。

    以下这段代码截取友善之臂提供的linux内核中的tiny4412_leds.c


    首先,先是定义了一个结构体变量,并对结构体变量进行初始化,在这个驱动中,只实现了ioctl函数,对照着上面的结构体,ulocked_ioctl就是结构体中的这个函数指针。

    long (*unlocked_ioctl) (struct file *,unsigned int, unsigned long);

    再来看看友善实现的adc驱动里,也是这么来做,这里看到 : 也是C语言结构体的一种初始化方式,也是合理的。


          在内核中,有很多这样的函数指针,所以,当我们了解了这样的套路以后,再去学习linux内核,我们的思想就会清晰很多了。

           再来看看回调函数在linux内核里的基本应用。

     从上节我们了解到,回调函数的本质其实也就是函数指针,只不过定义有所区别。它的定义就是:你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

    接下来我们来看一个例子:

    这段代码摘自友善之臂的button驱动:

     

    我们在tiny4412_buttons_open函数里看到

    err = request_irq(irq, button_interrupt, IRQ_TYPE_EDGE_BOTH,

                                     buttons[i].name,(void *)&buttons[i]);

    我们来看看request_irq这个函数:


    这个函数的作用是请求中断,我们来看看函数的第二个参数irq_handler_t handler是什么?


    到这里我们就明白了,第二个参数是一个用typedef重新定义的一个新类型的函数指针。

    那么也就是说一旦执行了tiny4412的open函数,就会通过request_irq去通过回调函数去执行按键中断,并返回一个中断句柄。这个回调函数,其实就是一个中断服务函数。


       回调函数在内核中就是这么来使用的,当然,还有其它的,比如我们在tiny4412的open函数里面还看到:

       setup_timer(&buttons[i].timer,tiny4412_buttons_timer,

                  (unsignedlong)&buttons[i]);

       这个函数的作用是注册一个定时器,通过回调函数tiny4412_buttons_timer来进行触发。

    如果你不看它的定义,你可能以为它是一个普通函数,其实它是一个宏函数。


       这个宏函数通过调用setup_timer_key这个函数来实现定时器的注册:


    通过这一节,我们了解到回调函数在Linux内核中的应用,为学习Linux内核,分析linux内核源代码打下了基础。


    展开全文
  • c之函数指针与回调函数

    千次阅读 2018-02-09 14:56:13
    函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。函数指针变量的声明:typedef int ...
  • 【C/C++开发】函数指针与回调函数

    千次阅读 2018-07-03 19:25:30
    回调函数其实就是一个通过函数指针调用的函数!假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,那么这就是回调机制。A函数就是回调函数,而通常情况下,A函数是系统在...
  • 之前博主给大家分享到了信号的概念和初步介绍signal函数的形式后就没有继续往下介绍了,实在是因为时间不够,那个时候博主还要上课,现在博主放假了就好好给大家分享一下如何注册信号捕捉,以及信号捕捉器的妙用。...
  • 函数指针与回调函数基础

    千次阅读 2013-04-02 16:58:01
    在高性能网络服务器程序的开发过程中,我们不能使用同步阻塞,同步非阻塞, 异步...事件驱动的设计中,函数指针回调函数是必不可少的编程技术,函数指针是最为基础的知识,本文 先详细描述函数指针的相关知识,打
  • 前面两篇文章:http://blog.csdn.net/morixinguan/article/details/65494239http://blog.csdn.net/morixinguan/article/details/65938128在UNix多线程编程中,我们会使用到以下函数:Pthread_create,我们来看看它的...
  • C语言中函数指针回调函数的详解

    万次阅读 多人点赞 2019-05-18 23:10:01
    函数指针:指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个...
  • 文章目录1 函数的类型2 函数指针2.1 函数指针的使用2.2 使用函数指针实现回调函数3 总结 1 函数的类型 跟以前学数组的时候是一样的,C语言中的数组是有自己的类型的。函数也是有自己的类型的。 函数的类型由返回值...
  • C++函数指针回调函数

    千次阅读 2019-03-06 23:44:32
    什么是函数指针 函数指针就是指向函数的指针,指向某种特定的类型。函数的类型由它的返回类型和形参类型共同决定,函数名无关,例如: bool lengthCompare(const string &amp;amp;, const string &amp;...
  • c函数指针回调函数

    千次阅读 2017-03-28 20:43:16
    函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型变、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,用于调用函数、传递参数。 函数指针变量的声明: ...
  • 因为函数的类型由它的返回类型和形参类型共同决定,函数名无关,所以想要声明一个函数指针,只需要用指针替换函数名即可,例如:比较字符串长度的函数:bool LengthCompare(const string &amp;, const string ...
  • 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。 我先给你一个自定义数据类型的例子。 typedef int* PINT; //为int* 类型定义了一个PINT的别名 int main
  • C语言函数指针与回调用函数

    万次阅读 2018-05-22 01:48:23
    1. 函数指针 指针是c语言的精髓,同时也是c语言中比较深奥、比较难掌握的一个知识点。本质上,对于一个内存单元来说,单元的地址即为指针, 其中存放的数据才是该单元的内容。我们允许用一个变量来存放指针,这种...
  • C语言 函数指针 | 回调函数

    千次阅读 2021-03-04 17:46:35
    回调函数:就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方直接调用,而是在...
  • 【C++基础之八】函数指针回调函数

    万次阅读 多人点赞 2013-09-16 09:40:06
    回调函数其实就是一个通过函数指针调用的函数!假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,那么这就是回调机制。B函数就是回调函数,而通常情况下,A函数是系统在...
  • 回调函数是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。  void f();// 函数原型 上
  • 函数指针回调函数与 GObject 闭包

    千次阅读 2012-06-08 11:11:36
    本文首先复习一下基于 C 语言函数指针回调函数的概念,进而学习 GObject 闭包的用法。这些知识都面向对象程序设计基本上没有什么关系。 函数指针 所谓函数指针,就是可以指向函数的指针,例如: ? ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,013
精华内容 60,005
关键字:

函数指针与回调函数