怎样定义函数指针数组

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

一、什么是函数指针

在定义函数指针数组之前,需要首先知道什么是函数指针。函数指针的定义形象点来说,就是用一个指针变量代替原函数中的函数名位置。
原函数
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)

你可能感兴趣的:(C语言学习笔记,C语言,函数指针)