C语言回调函数到底是什么?
2026/5/11 3:02:03 网站建设 项目流程

很多刚学C语言的朋友看到"回调函数"四个字就头疼,觉得这是个高深莫测的概念。其实说白了,回调函数就是把一个函数当成参数传给另一个函数,让它在合适的时机"回头调用"你传过去的函数。

今天这篇文章,我用最通俗的语言+完整代码示例,让你彻底搞懂回调函数的本质。

一、回调函数到底是个啥?

先打个比方:

你点外卖的时候,不可能一直盯着手机等骑手。你会告诉骑手:"到了给我打电话"。骑手到了之后,主动"回调"你——这就是回调的思想。

在C语言里,回调函数也是这个逻辑:

A函数把B函数的地址传给C函数,C函数在合适的时机"回头调用"B函数。

用代码来说,就是函数指针作为参数。

二、为什么要用回调函数?

回调函数的核心优势就两个字:解耦。

三、qsort函数:回调函数的经典案例

C标准库里的qsort函数,就是回调函数最经典的实战案例。先看它的函数原型:

#include void qsort( void *base, // 待排序数组的首地址 size_t nmemb, // 数组元素个数 size_t size, // 每个元素的大小(字节) int (*compar)(const void *, const void *) // 比较函数指针(回调函数) );

看到第四个参数了吗?int (*compar)(const void *, const void *),这就是回调函数指针!

四、完整代码示例(可直接复制运行)

下面这段代码演示了如何用qsort排序整数数组,包含了完整的比较函数实现:

#include #include // 回调函数:比较两个整数 int compare_int(const void *a, const void *b) { int int_a = *(const int *)a; int int_b = *(const int *)b; if (int_a < int_b) return -1; if (int_a > int_b) return 1; return 0; } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); printf("排序前:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); // 调用qsort,传入回调函数compare_int qsort(arr, n, sizeof(int), compare_int); printf("排序后:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }

运行结果:

排序前:64 34 25 12 22 11 90 排序后:11 12 22 25 34 64 90

五、回调函数的执行流程图解

main函数 │ 调用 qsort(arr, n, sizeof(int), compare_int) │ qsort内部(不知道你要怎么比,只管调用你传进来的函数) │ 回调 compare_int(&arr[i], &arr[j]) ← 这就是"回调"! │ compare_int返回比较结果(-1, 0, 1) │ qsort根据结果调整元素位置

六、进阶:用同一个框架实现不同排序规则

回调函数的真正威力在于灵活性。同样是qsort,换个比较函数就能实现降序排列:

// 降序排列的比较函数 int compare_int_desc(const void *a, const void *b) { return compare_int(b, a); // 反过来比较就是降序 } // 使用:qsort(arr, n, sizeof(int), compare_int_desc);

甚至排序结构体数组:

typedef struct { char name[20]; int score; } Student; // 按分数排序 int compare_by_score(const void *a, const void *b) { Student *s1 = (Student *)a; Student *s2 = (Student *)b; return s1->score - s2->score; }

七、总结

回调函数的本质就是:函数指针作为参数,实现"你定义规则,框架来执行"。

搞懂回调函数,你就迈过了C语言进阶的一道重要门槛。后面学事件驱动、多线程、网络编程都会用到这个思想。

---

觉得有用的话,点个赞收藏起来慢慢看!有任何问题欢迎在评论区留言讨论~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询