怎样定义函数指针数组

如果一个指针指向某个函数,那么它便是函数指针。有时候我们如果需要在一个循环中,每次调用不同的函数(这些函数的返回值和参数相同,函数名不同,实现不同),那么就可以使用函数指针数组来使代码更加简练和易读。那么,怎样定义函数指针数组呢?

一、什么是函数指针

在定义函数指针数组之前,需要首先知道什么是函数指针。函数指针的定义形象点来说,就是用一个指针变量代替原函数中的函数名位置。
原函数
int Add(int a,int b)
函数指针定义(不需要加入&取值符号,因为函数标识实际上就是一个地址)
int (*p)(int ,int)
p=Add
调用(直接替代原有标识,类比数组传参)
p(A,B)

实际上这与普通的指针定义是非常类似的,所注意的地方便是因为优先级的原因将*p加上括号(类比指向二维数组的指针的定义方式)

·定义的一些注意事项

指针函数类型的定义比其他指针的定义更加严格,即为必须做到参数的完全对应,如以下例子
错误
int (*p)(int)=Add
int (*p)(double)=Add
正确
int (*p)(int ,int)=Add

在C中,我们所接触到的第一个函数指针应该是qsort排序,这也使我们能够根据不同的情况调用不同的函数。

二、函数指针数组的定义

情况假定:编写一个这样一个数组,这一个数组可以用于索引一系列的排序函数
实现其实非常简单我们只需在改写(*p)为(*p[MAX])就行了
实现

int(*sort[]) =
    {
        Bubble_sort, //冒泡排序
        Select_sort, //选择排序
        Insert_sort, //插入排序
        Shell_sort,  //希尔排序
        Merge_sort,  //归并排序
        Heap_sort,   //堆排序
        Qsort,       //快速排序
        Radix_sort   //基数排序
     }
·题外话,如何分配一个函数指针数组的空间
 int (*pfunct)(int, int) = (int (*)(int, int))calloc(20, sizeof(int (*)(int, int)));

感觉这个在cpp中的作用更大(小声BB)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值