先复习函数的定义与函数的声明:
//这是一个求和函数的定义: int add(int x, int y) { return(x + y); } //可以这样声明: int add(int x, int y); //也可以这样声明: int add(int, int);
定义一个函数指针声明一个函数差不多, 用 (* ) 包括函数即可:
//像这样: int (*pfun)(int, int); //或这样: int (*pfun)(int x, int y); //也可以: typedef int (*pfun)(int, int); //这就声明了一个叫 pfun 的函数指针, 能被它指向的函数一定要有相同的参数格式.
1. 简单例子:
#include <stdio.h> int add(int x, int y) {return(x + y);} int sub(int x, int y) {return(x - y);} int mul(int x, int y) {return(x * y);} int div(int x, int y) {return(x / y);} int main(void) { int (*pf)(int, int); pf = add; printf("%d\n", pf(9, 3)); /* 12 */ pf = sub; printf("%d\n", pf(9, 3)); /* 6 */ pf = mul; printf("%d\n", pf(9, 3)); /* 27 */ pf = div; printf("%d\n", pf(9, 3)); /* 3 */ getchar(); return 0; }
2. 函数指针数组:
#include <stdio.h> int add(int x, int y) {return(x + y);} int sub(int x, int y) {return(x - y);} int mul(int x, int y) {return(x * y);} int div(int x, int y) {return(x / y);} int main(void) { int (*pf[4])(int, int) = {add, sub, mul, div}; printf("%d\n", pf[0](9, 3)); /* 12 */ printf("%d\n", pf[1](9, 3)); /* 6 */ printf("%d\n", pf[2](9, 3)); /* 27 */ printf("%d\n", pf[3](9, 3)); /* 3 */ getchar(); return 0; }
3. 用函数指针做参数:
#include <stdio.h> int add(int x, int y) {return(x + y);} int sub(int x, int y) {return(x - y);} int mul(int x, int y) {return(x * y);} int div(int x, int y) {return(x / y);} int math(int(*pfun)(int, int), int x, int y) { return pfun(x, y); } int main(void) { printf("%d\n", math(add, 9, 3)); /* 12 */ printf("%d\n", math(sub, 9, 3)); /* 6 */ printf("%d\n", math(mul, 9, 3)); /* 27 */ printf("%d\n", math(div, 9, 3)); /* 3 */ getchar(); return 0; }
分类:
学习 C 语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2007-12-04 Delphi 快捷键
2007-12-04 上标、下标和引用
2007-12-04 Delphi 数据类型列表
2007-12-04 字符串的"大小"比较