怎樣定義函數指針數組


如果一個指針指向某個函數,那么它便是函數指針。有時候我們如果需要在一個循環中,每次調用不同的函數(這些函數的返回值和參數相同,函數名不同,實現不同),那么就可以使用函數指針數組來使代碼更加簡練和易讀。那么,怎樣定義函數指針數組呢?

一、什么是函數指針

在定義函數指針數組之前,需要首先知道什么是函數指針。函數指針的定義形象點來說,就是用一個指針變量代替原函數中的函數名位置。

原函數
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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM