C语言回调函数

C语言回调函数教程

C 语言 中,回调 函数 就是一个通过 函数指针 调用的函数。如果你把函数的指针(地址)作为 参数 传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数注意点

  • 函数指针作为另一个函数的参数
  • 回调函数不是由函数实现方直接调用
  • 特定事件或条件发生由另一方调用

C语言回调函数详解

定义

void (*pFunc)(int ,int, double) = NULL;

说明

我们定义了一个回调函数 pFunc,其返回值类型为 void,接受两个 int 类型和一个 double 类型的参数。

C语言回调函数定义二

定义

typedef void (*pFunc)(int, int, double);

说明

我们使用了 typedef 定义了一个回调函数 pFunc,其返回值类型为 void,接受两个 int 类型和一个 double 类型的参数。

案例

定义回调函数

定义一个回调函数,并调用

#include <stdio.h> int sum(int num1, int num2) { return num1 + num2; } int sub(int num1, int num2) { return num1 - num2; } int mul(int num1, int num2) { return num1 * num2; } int div(int num1, int num2) { return num1 / num2; } typedef int (*pFunc)(int a,int b); int func10(int num, pFunc func) { return func(num, 10); } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int a = 1024; int retSum = func10(a, sum); int retSub = func10(a, sub); int retMul = func10(a, mul); int retDiv = func10(a, div); printf("retSum = %d, retSub = %d, retMul = %d, retDiv = %d\n", retSum, retSub, retMul, retDiv); return 0; }

程序运行后,控制台输出如下图所示:

45_C语言函数指针.png

我们首先,定义了四个函数,分别为 sum、sub、mul 和 div,接着,我们使用了 typedef 定义了一个函数指针,该函数指针接受两个 int 类型的参数,返回一个 int 类型的返回值。

最后,我们再次定义了一个函数,该函数,接受一个 int 类型的值和一个函数指针做为参数,最后,我们在 main 函数里,通过在 func10 函数里面传入不同的函数,实现了不同的功能。

C语言回调函数总结

在 C 语言中,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为 参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。