C语言 函数指针
指针不仅仅能指向变量,也可以指向函数,这个功能主要用在方便快捷地调用函数上。
比如我们结合前面说的三元描述符、子函数来看看如何用函数指针。
看一个例子如下,我们已经写好了如何选择最大值,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <stdio.h>
int max(a, b) { return (a > b ? a : b); }
int main() { int a = 6; int b = 8; printf("max is %d\n", max(a, b));
return 0; }
|
上面的是比较2个值的大小,如果想比较3个值呢,用上面的代码,新增如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <stdio.h>
int max(a, b) { return (a > b ? a : b); }
int main() { int a = 6; int b = 8; int c = 12;
int t = max(a,b);
printf("max is %d\n", max(t, c));
return 0; }
|
在增加一个,4个值呢,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h>
int max(a, b) { return (a > b ? a : b); }
int main() { int a = 6; int b = 8; int c = 12; int d = 9;
int t = max(a,b); int tt = max(t,c);
printf("max is %d\n", max(tt, d));
return 0; }
|
所以看出来,每次新增一个值,就需要多调用一次max函数。
如果使用函数指针就可以很好地解决这个问题,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <stdio.h>
int max(a, b) { return (a > b ? a : b); }
int main() { int (*p)(int, int) = & max;
int a = 6; int b = 8; int c = 12; int d = 9;
int t = p(a,b); int tt = p(t,c);
printf("max is %d\n", p(tt, d));
return 0; }
|
从这里例子也可以看出来,函数的指针的格式如下所示:
- 返回值与原函数一致;
- 定义的参数与原函数类型一致;
不过好像也没有简便很多,不过如果碰到函数名巨长无比的,还是有些作用的,另外我们可以使用内嵌的方法,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h>
int max(a, b) { return (a > b ? a : b); }
int main() { int (*p)(int, int) = &max;
int a = 6; int b = 8; int c = 12; int d = 9;
printf("max is %d\n", p(p(p(a, b), c), d));
return 0; }
|