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函数,作为该函数的的一个默认值进行返回.
}
回调函数
最新推荐文章于 2025-06-13 19:15:39 发布