尧图精选

函数指针相关知识

🕒 发布时间:2026/9/6 3:01:01 📁 来源:尧图网络
zhangyunxin411 2026.9.51. 什么是函数指针函数指针实际上就是一种指针指向的是函数比如int(*p)(int,int);// 表示指针p指向一个参数为(int, int)返回值为int的函数函数指针怎么用函数指针就是一种指针类型要使用同样需要声明和定义intfun(inta,intb){...}int(*p)(int,int);pfun;利用 typedef 对函数指针起别名顺便归纳一下 typedef 的写法总体上就是声明一个该类的对象然后将变量名改为要起的别名就行// 比如要给一般的变量、指针变量起别名inta;// 声明typedefintI;// 别名Iint*p;// 声明typedefint*POINT;// 别名POINTstructdata{inti;charc;}stu;// 声明typedefstructdata{inti;charc;}DATA;// 别名DATAint*array[10];// 指针数组typedefint*ARRAY[10];int(*array)[10];// 数组指针typedefint(*POINT)[10];那么同样的函数指针也能这么写在之后的操作中会发现这么写很方便:typedefint(*FUN)(int,int);接下来总结函数指针的主要用途作为参数、作为返回值2. 函数指针作为参数函数作为参数很常见比如各种回调函数。只需要将一个函数指针作为参数传入回调函数就可以调用不同的函数比如voidfun1(){...}voidfun2(){...}voidcall_fun(void(*p)()){p();}call_fun(fun1);call_fun(fun2); #3.函数指针作为返回值 为什么要执行一个函数再让这个函数返回一个函数呢有什么意义主要意义有两个1.可以根据输入参数/状态动态决定要执行哪一个函数。当然你也可以用if-else实现但是当状态/参数多的时候代码会变得冗长2.在面向对象编程中有的函数被封装此时通常会通过这种方法来通过一个外部的函数接口来调用内部的私有方法 对于1给出下面的一个命令分发器的例子 c// -----命令对应的函数-----voidled_on(){printf(LED ON!);}voidled_off(){printf(LED OFF!);}voidmotor_run(){printf(MOTOR RUN!);}typedefvoid(*FUN)(void);#defineCMD_NUM3// -----两个用于维护的数组-----char*cmd_name[CMD_NUM]{led on,led off,motor run};FUN cmd_handel[CMD_NUM]{led_on,led_off,motor_run};// -----命令分发器代码-----FUNcmd_search(char*str){FUN pNULL;inti0;for(i0;iCMD_NUM;i){if(strcmp(str,cmd_name[i])0){pcmd_handel[i];returnp;}}returnp;}intmain(){charstr[10];fgets(str,10,stdin);str[strcspn(str,\n)]\0;FUN pcmd_search(str);if(p!NULL)p();return0;} 在上面的例子中命令分发器逻辑不需要修改当增删命令时只需要修改两个数组即可甚至数组和处理函数可以变成配置数据程序启动时动态加载实现在不重启系统的情况下动态增删命令。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →