其实能让c语言变得更强大的就是函数指针了,他可以让更少的代码做更多的事情,可以减少很多的重构成本.......
来看一个简单实用的例子:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int ReturnMaxValue(int left, int right)
{
return (left > right) ? left : right;
}
int ReturnMinValue(int left, int right)
{
return (left < right) ? left : right;
}
void Show(int left, int right, int (*rule)(int left, int right))
{
printf("the processing result : %d\n", rule(left, right));
}
int main()
{
int left = 9;
int right = 99;
Show(left, right, ReturnMinValue);
Show(left, right, ReturnMaxValue);
return 0;
}
来分析一个函数指针的声明:
1、既然他是一个指针所以需要这样声明
int *rule;
2、他有两个参数,所以要这样
int *rule(intleft, int right);
3、如果返回时int*不好区分,所以要用括号括起来
int (*rule)(intleft, int right);
4、最终就得到了函数指针的形态了
再来看一个简单使用的例子
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char *ReturnMyName(int left, int right)
{
return (left < right) ? "zengraoli" : "zeng";
}
int main()
{
int left = 9;
int right = 99;
char *(*rule)(int left, int right);
rule = &ReturnMyName;
printf("%s\n", rule(left, right));
return 0;
}
我们还可以用typedef来精简这个声明:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef char *(*function)(int left, int right);
char *ReturnMyName(int left, int right)
{
return (left < right) ? "zengraoli" : "zeng";
}
int main()
{
int left = 9;
int right = 99;
function rule;
rule = &ReturnMyName;
printf("%s\n", rule(left, right));
return 0;
}
可以看到,这样的结果,也是和上面一样的.