C1

函数指针(function pointer)

This project is maintained by wangfakang

在c语言中的指针的功能太强大了:

下面我们说说函数指针,故名思议就是指向函数的指针;
假如我们想实现一个基本计算器的功能(+.-.*./):

  2 #include <stdio.h>
  3 
  4 typedef int (*Func)(int, int);
  5 
  6 typedef struct do_func {
  7     int choice;
  8     Func func;
  9 }St_func;
 10 
 11 
 12 int add(int a, int b) {
 13     return a + b;
 14 }
 15 
 16 int sub(int a, int b) {
 17     return a - b;
 18 }
 19 
 20 int mul(int a, int b) {
 21     return a * b;
 22 }
 23 
 24 int div(int a, int b) {
 25     return b == 0 ? 0xffffffff:a/b;  
 26 }    
 27 //上面函数只是做了简单处理.
 28 St_func operation[] = {
 29     {0,          add},
 30     {1,          sub},
 31     {2,          mul},
 32     {3,          div},
 33 };  
 34 
 34 
 35 
 36 int main()
 37 {
 38     int i = 0;
 39 
 40     for(; i<4; i++) {
 41       printf("%d\n", operation[i].func(8, 0));
 42     }
 43 
 44     return 0;
 45 }

上面的列子就简单的利用了函数指针的特性,进行了代码上的优化(复用性和可扩展性提高).
当然类似该方面的应用还有很多的.

下面在看一个小的列子:

 35 typedef int (*F)(int);
 36 
 37 int sfunc(int n) {
 38    return 0;
 39 }
 40 int sum(int n) {
 41     static F f[2] = {sfunc, sum};
 42 
 43     return n + f[!!n](n -1);
 44 }
 45 
 46 int main()
 47 {
 48     printf("%d\n", sum(4));
 49 
 50 }

上面函数就是求N项和.注意两个!.
看到了上面这些,有没有觉得函数指针还是比较好的.

欢迎一起交流学习

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author