C語言中 指向函數的指針 簡介



引子:在學習CPrimerPlus的第十四章的14.13節中,遇到了如下三行文字,是有關指向函數的指針的,把我搞暈了。

char * fump();              //返回指向char的指針的函數
char (* frump)();           //指向返回類型為char的函數的指針
char (* flump[3])();        //由3個指針組成的數組,每個指針指向返回類型為char的函數

原來自己根本都不知道還有指向指針的函數,難怪自己懵逼了。參考了兩篇博客(1.“http://blog.csdn.net/hzyong_c/article/details/7464202”  2.“http://blog.chinaunix.net/uid-22145625-id-1789465.html”),自己作一個理解和記錄如下。


 

1.函數是可以被指針指向的

函數在編譯時會被分配一個入口地址,調用函數其實就是通過 指向函數入口地址的指針 進行的。

2.函數指針變量 的 聲明、定義與調用

聲明格式為:返回類型 (*函數指針變量) (參數列表) 

例如: int (* FunPtr) (int, int) 。該例子中,FunPtr為函數指針,指向的函數是這樣的---輸入兩個int返回一個int。

定義格式為:返回類型 (*函數指針變量) (參數列表) 

例如: FunPtr = ∑ //sum是一個相符的函數,即int sum(int, int);

調用格式為:(* 函數指針變量) (參數列表)

例如:b = (* FunPtr) (3, 5);

/* 為了體驗函數指針的聲明、定義和調用 */
#include <stdio.h>
int sum(int, int);

int main (void)
{
    int a, b;

    int (* FunPtr) (int, int);    //聲明 FunPtr 是指向函數的指針,指向的函數具有兩個int輸入和一個int輸出
    FunPtr = & sum;               //定義 FunPtr 指向的地址為函數 sum 的入口地址

    a = sum(3,7);
    b = (* FunPtr) (3, 7);        //調用函數指針 FunPtr

    printf("sum(3,7) = %d.\n(*FunPtr)(3,7) = %d\n", a, b);
    return 0;
}

int sum(int x, int y)
{
    return (x+y);
}

 


免責聲明!

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



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