现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

话说函数指针:把代码传给函数

2014-09-18 06:52 工业·编程 ⁄ 共 1413字 ⁄ 字号 暂无评论

其实能让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; 

可以看到,这样的结果,也是和上面一样的.

给我留言

留言无头像?