周梦康 发表于 2017-09-24 775 次浏览 标签 : C语言快速入门

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

上节课中,我们学会了函数指针的声明和函数指针调用函数的方法。
这节课,我们学习函数指针在回调函数中的妙用。
回调函数就是参数名中包含有函数指针的函数。比如

void call(void (*fp)(int));

接着上节课的说明

#include "stdio.h"

void func(int);
void call(void (*fp)(int)); // 把 func 的函数指针作为 call 的参数

int main(int argc, char const *argv[])
{
    call(func); // 直接使用原始函数名,函数名就是函数的首地址
    
    return 0;
}

void func(int i)
{
    printf("%d\n", i);
}

void call(void (*fp)(int))
{
    fp(10);
}

上面的函数调用的套路是不是熟悉呢,这就是C语言里面的回调函数的执行方式,必须传入函数指针。

上面的例子复杂化点

#include <stdio.h>

int sum(int a, int b);
int call(int (*p)(int,int), int a, int b);


int main(int argc, char const *argv[])
{
    sum(1,2);
    call(sum,3,4);
    return 0;
}

int sum(int a,int b){
    printf("%d\n", a+b);
    return 0;
}

int call(int (*p)(int,int), int a, int b){
    return p(a,b);
}

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表