如何创建函数指针
假如想要创建指针变量,用来保存上一页中函数的地址,必须像这样做:
看起来很复杂,对吗?
但就得那么复杂,因为需要把函数的返回类型和接收参数类型告诉C编译器。一旦声明了函数指针变量,就可以像其他变量一样使用它,可以对它赋值,也可以把它加到数组中,还可以把它传给函数……
……回去看看find()
的代码……
这里没有蠢问题
问:
char**
是什么意思?是不是打错了?答:
char**
是一个指针,通常用来指向字符串数组。
练习
看看其他人想要找的男生类型,你能否为每类搜索创建函数?第一个已经写好。
练习解答
你将看到其他人想找什么类型的男生,并为每类搜索创建函数。
试驾
把你写的这些函数拉出来溜溜,看看它们是怎么工作的。
你需要创建一个程序,依次把函数传给find()
:
find()
函数每次都搜索了不同的内容。有了函数指针,就能把函数传给函数,用更少的代码创建功能更强大的程序,这就是为什么说函数指针是C语言最强大的特性之一。
函数指针狩猎指南
当你身处芦苇丛中,识别函数指针就变得异常困难,下面这个狩猎指南简单易懂,便于携带,而且刚好可以装进C程序员的弹夹包。
这里没有蠢问题
问:如果函数指针是指针,为什么调用函数时不需要在它们前面加
*
?答:可加也可不加,可以把代码中的
match(ADS[i])
换成(*match)(ADS[i])
。问:我可以用
&
取得函数的地址吗?答:当然,除了
find(sports_or_workout)
,还可以写find(&sports_or_workout)
。问:那为什么不这么写?
答:即使省略
*
和&
,C编译器也能识别它们,这样代码更好读。