怎样定义函数指针数组
如果⼀个指针指向某个函数,那么它便是函数指针。有时候我们如果需要在⼀个循环中,每次调⽤不同的函数(这些函数的返回值和参数相同,函数名不同,实现不同),那么就可以使⽤函数指针数组来使代码更加简练和易读。那么,怎样定义函数指针数组呢?
⼀、什么是函数指针
在定义函数指针数组之前,需要⾸先知道什么是函数指针。函数指针的定义形象点来说,就是⽤⼀个指针变量代替原函数中的函数名位置。原函数
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)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。