函数指针(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项和.注意两个!.
看到了上面这些,有没有觉得函数指针还是比较好的.
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流