其实能让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; }
可以看到,这样的结果,也是和上面一样的