2.6 函数指针

2.6 函数指针

函数指针是指向可执行代码段或调用可执行代码段的信息块的指针,而不是指向某种数据的指针。函数指针将函数当作普通数据那样存储和管理。函数指针有一种固定的形式,就是包含一个确定的返回值类型和若干个函数参数。声明一个函数指针看起来与声明一个函数非常类似,只是在函数名之前有一个表示指针的*,并且函数名和星号会用小括号括起来。例如在下面一段代码中,match被声明为一个函数指针,它接收两个void指针类型的参数,同时返回一个整型。

int (*match)(void *key1, void *key2);


以上函数声明的意思是,我们指定了一个接收两个void指针,返回一个整型,名为match的函数指针。例如:假设有一个match_int函数,它的两个void指针参数指向整型并回返1。考虑到之前的函数声明match,我们可以这样去赋值:

match = match_int;


要执行一个由函数指针所引用的函数,我只需要在正常调用普通函数的地方调用函数指针。例如:想要调用之前提到的函数指针match,我们执行下面的语句,假设xyretval都已经被声明为整型:

retval = match(&x, &y);


在本书中,函数指针的一个重要用途是将函数封装到数据结构中去。例如:在实现链式哈希表时(见第8章),这个哈希表数据结构就包含一个类似以上所提到的名为match的函数指针。此函数的作用是,当任何时候我们需要判断被查找的数是否在表中存在时,都可以调用此函数来完成查找。当哈希表初始化时,某个函数会被指派给这个指针。这个被指派的函数与match有相同的原型,不同之处是,在内部进行两个元素的比较时,函数会根据哈希表中的数据类型进行具体类型的数据比较。在特定的数据结构中声明一个函数是C语言一种非常好的特性,因为它可以使数据结构或函数变得更具通用性。

 

PS:

1、此书(Mastering Algorithms with C)译稿版权归本人(Love_Lei)及好友(bigship)共同所有,未经本人同意谢绝一切转载,并不得抄袭,模仿,盗版!更请大家监督盗版之人!

2、由于本人水平有限,如对译文有任何建议和异议,欢迎大家留言指正,我们共同讨论学习!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值