一、先搞懂什么是函数指针函数指针 指向函数的指针它存的不是数据是函数的地址。最简单的函数指针// 普通函数intadd(inta,intb){returnab;}// 定义一个函数指针int(*p)(int,int);// 让指针指向函数padd;// 通过指针调用函数intresp(10,20);// 等价 add(10,20)二、函数指针数组重点作用把多个同类型函数放进一个数组用下标直接调用适合菜单选择命令处理状态机多任务调度定义格式返回值类型(*数组名[元素个数])(参数列表);完整示例菜单函数数组#includestdio.hvoidfunc1(){printf(执行功能1\n);}voidfunc2(){printf(执行功能2\n);}voidfunc3(){printf(执行功能3\n);}intmain(){// 函数指针数组存3个无参无返回值函数void(*arr[3])(){func1,func2,func3};// 直接用下标调用arr[0]();// 执行 func1arr[1]();// 执行 func2arr[2]();// 执行 func3return0;}最常用场景菜单选择intchoose1;arr[choose]();// 选1就调用1选2就调用2三、回调机制进阶灵魂什么是回调函数把函数当参数传给另一个函数在合适时机被调用 → 叫回调一句话你定义的函数别人库/系统/框架帮你调用 回调作用解耦框架与业务分离事件触发中断处理、定时器、异步处理最简单回调示例#includestdio.h// 1. 回调函数你写的voidmyCallback(intval){printf(回调被调用值 %d\n,val);}// 2. 处理函数框架/库接收一个函数指针voidprocess(void(*cb)(int)){printf(开始处理...\n);cb(100);// 调用回调}intmain(){process(myCallback);// 把函数当参数传进去return0;}运行结果开始处理... 回调被调用值 100四、高级实战函数指针数组 回调 合体这是嵌入式、Linux、驱动最常用写法#includestdio.h// 回调函数类型typedefvoid(*Callback)(int);// 函数数组voidtask1(intid){printf(任务1执行ID%d\n,id);}voidtask2(intid){printf(任务2执行ID%d\n,id);}voidtask3(intid){printf(任务3执行ID%d\n,id);}// 回调调度中心通用框架voidrunTask(Callback cb,intid){cb(id);}intmain(){// 函数指针数组Callback tasks[]{task1,task2,task3};// 批量执行回调for(inti0;i3;i){runTask(tasks[i],i1);}return0;}五、最精炼总结面试/背诵专用函数指针数组把多个同类型函数放进数组用下标快速调用适合菜单、命令、状态机回调机制函数作为参数传递你定义系统/框架调用实现解耦、事件驱动、模块化一句话记牢函数指针数组 函数列表回调 把函数交给别人调用。