当前位置: 首页 > news >正文

回调函数

🧩 C语言回调函数笔记

一、什么是回调函数

回调函数(Callback Function) 是通过函数指针传递给另一个函数,并在适当时机被后者调用的函数。

通俗解释:
你把自己写的函数地址交给别人,别人在合适的时候“回过头”来调用它,这个过程叫“回调”。


二、回调函数的原理

  1. 函数名本质是函数入口地址;
  2. 可以用函数指针保存这个地址;
  3. 将函数指针作为参数传入另一个函数;
  4. 由该函数在运行过程中再通过指针调用它。

三、基本语法格式

// 定义回调函数类型
返回类型 (*函数指针名)(参数类型列表)// 回调函数示例
void func(void (*callback)(void));

示例:

#include <stdio.h>void sayHello() {printf("Hello, Callback!\n");
}void run(void (*cb)()) {printf("Before callback\n");cb();  // 调用回调函数printf("After callback\n");
}int main() {run(sayHello);return 0;
}

四、常见用途

用途 示例
提高灵活性 函数行为由外部传入的回调决定
实现解耦 模块间只通过函数指针交互
系统库函数 如 qsort() 使用比较函数回调
事件驱动编程 GUI事件、信号处理、异步回调等

五、典型示例:qsort 的比较函数

#include <stdio.h>
#include <stdlib.h>int compare(const void *a, const void *b) {return (*(int*)a - *(int*)b);
}int main() {int arr[] = {5, 2, 9, 1, 7};qsort(arr, 5, sizeof(int), compare);  // compare为回调函数for (int i = 0; i < 5; i++)printf("%d ", arr[i]);return 0;
}

六、进阶示例:带参数的回调

#include <stdio.h>int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }void compute(int x, int y, int (*operation)(int, int)) {printf("Result: %d\n", operation(x, y));
}int main() {compute(5, 3, add);compute(5, 3, sub);return 0;
}

七、要点总结

  • 回调函数的本质:函数指针的间接调用
  • 使用时要保证函数签名(参数和返回类型)一致
  • 常见使用场景:排序函数(qsort)、信号处理、插件机制
  • 优点:灵活、解耦、扩展性强

八、面试高频问

  1. 什么是回调函数?
    → 一个通过函数指针传入、由其他函数在特定时机调用的函数。

  2. 回调函数与普通函数的区别?
    → 回调函数不是主动调用的,而是被动触发的。

  3. 举例标准库中使用回调的函数?
    qsort()signal()atexit() 等。

http://www.hskmm.com/?act=detail&tid=40359

相关文章:

  • gdb调试常用命令
  • 2025年10月中国管理咨询公司推荐榜:五强数据对比
  • 条码识别插件 quaggaJS - microsoft
  • 2025 年灵巧手厂家最新推荐榜,技术实力与市场口碑深度解析,筛选高适配性与长耐用性优质品牌
  • Dify工作流实战:一键自动生成测试报告并推送钉钉,我每天白赚1小时
  • CF2043D Problem about GCD
  • 一起为可信数据流通添砖加瓦,隐语社区 OSCP 专项开源活动正式启动!
  • 2025年10月精益管理咨询公司推荐:权威榜单与多维对比评测
  • 2025年10月降本增效咨询公司推荐:实力榜对比五家优劣势
  • CF2093G Shorten the Array
  • 2025年10月降本增效咨询公司推荐榜:五强数据横评
  • 2025 年水处理聚丙烯酰胺,聚丙烯酰胺水处理剂,工业废水处理聚丙烯酰胺厂家最新推荐,产能、专利、环保三维数据透视!
  • 2025 年阴离子聚丙烯酰胺,阳离子聚丙烯酰胺,非离子聚丙烯酰胺厂家最新推荐,产能、专利、环保三维数据透视
  • 2025 年聚丙烯酰胺絮凝剂,PAM 聚丙烯酰胺,聚丙烯酰胺聚合氯化铝厂家最新推荐,产能、专利、环保三维数据透视
  • ST表
  • 吱吱企业即时通讯:赋能企业高效沟通与协作新生态
  • Windows Server 2022 OVF (2025 年 10 月更新) - VMware 虚拟机模板
  • Linux运行时常用命令
  • 2025年盘式干燥机厂家权威推荐榜单:回转滚筒干燥机/真空干燥机/沸腾干燥机源头厂家精选
  • Windows Server 2025 OVF (2025 年 10 月更新) - VMware 虚拟机模板
  • 同步盘哪个好用?坚果云、百度网盘等五大工具横向对比
  • 借助 ChatGPT API 将 AI 集成到测试自动化框架中
  • P11994 [JOIST 2025] 外郎糕 题解
  • 告别手动上传!10款自动同步本地文件夹的网盘深度评测
  • 腾讯CodeBuddy:AI IDE的革命性突破,开发者工作方式的彻底重塑
  • C++中STL容器应用
  • 2025 年德州清水混凝土修补,德州仿清水混凝土修补,德州外墙仿清水混凝土修补公司最新推荐,聚焦资质、案例、售后的五家企业深度解读
  • 2025 年德州混凝土修补,山东专业混凝土修补,山东建筑清水混凝土修补,山东装饰清水混凝土修补公司最新推荐,聚焦资质、案例、售后的五家企业深度解读
  • 前后端分离,千万别再搞错了!
  • 通用知识手册