回调函数
2015-10-11 15:01
211 查看
1. 案例分析 (1) (2) (3) 2.需求: 控制台输入字符串,根据字符串找到对应的函数,求得 相应的 结果 并返回. (1) main.m 文件代码 while (1) { printf("请输入字符串: max --- 求最大值 或者 min --- 求最小值 或者 sum --- 求和"); char str[20] = {0}; scanf("%s", str); int value = getValueForString(3, 5, str); printf("value = %d\n", value); } (2) Function.m 文件代码 //函数指针作为函数参数 typedef int(*PFUN)(int x, int y); //求两个数的最大值 int maxValue(int x, int y); //求两个数的最小值 int minValue(int x, int y); //求两个数的和 int sumValue(int x, int y); //根据字符串求相对应的值. int getValueForString(int x, int y, char str[]); //助攻函数 --- 根据字符串返回对应的函数 PFUN getFunctionByString(char str[]); //声明结构体 struct stringAndFunction { char string[20]; //字符串 PFUN function; //函数指针 }; typedef struct stringAndFunction StringAndFun; //分析: 根据需求,要存在对应的表(映射表) -- 结构体数组.这个表只需再 Function.m文件中创建即可, 因为, 外界不关心你本身可以匹配那些函数, 只关心能不能取到某一个值. (2) Function.h 文件代码 //求两个数的最大值 int maxValue(int x, int y) { return x > y ? x : y; } //求两个数的最小值 int minValue(int x, int y) { return x < y ? x : y; } //求两个数的和 int sumValue(int x, int y) { return x + y; } //创建映射表 --- 结构体数组 StringAndFun funPair[] = { {"max", maxValue}, {"min", minValue}, {"sum", sumValue} }; //根据字符串求相对应的值. int getValueForString(int x, int y, char str[]) { //根据字符串 str 获取到对应的函数 PFUN fun = getFunctionByString(str); return fun(x, y); } //助攻函数 --- 根据字符串返回对应的函数 PFUN getFunctionByString(char str[]) { //遍历映射表 for (int i = 0; i < sizeof(funPair) / sizeof(funPair[0]); i++) { //判断, 映射表中是否有符合相应的字符串 if (strcmp(str, funPair[i].string) == 0) { //相等, 代表存在对应的字符串, 因此可以找到对应的函数, 返回该函数即可 return funPair[i].function; } } return NULL; // return maxValue; //此时maxValue函数,作为该函数的的一个默认值进行返回. }
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享