您的位置:首页 > 编程语言 > C语言/C++

回调函数

2015-10-11 15:01 337 查看
1. 案例分析
(1)![函数指针做参数](http://img.blog.csdn.net/20151011145212686)
(2)![函数调用](http://img.blog.csdn.net/20151011145332526)
(3)![回调过程](http://img.blog.csdn.net/20151011144717577)

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函数,作为该函数的的一个默认值进行返回.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 函数指针