C 函數指針語法總結

C 函數指針語法總結

函數指針

定義

每個函數都佔用一段內存單元,它們有一個起始地址,指向函數入口地址的指針稱爲函數指針ios

注意:函數指針的本質是一個指針變量,且指針指向的函數的入口地址函數

語法

返回類型 (*函數名) (參數表);spa

例:指針

#include <iostream>
 
using namespace std;
//定義一個函數指針pFUN,它指向一個返回類型爲char,有一個整型的參數的函數
char (*pFun)(int);
//定義一個返回類型爲char,參數爲int的函數
//從指針層面上理解該函數,即函數的函數名其實是一個指針,
//該指針指向函數在內存中的首地址
char glFun(int a)
{
    cout << a;
    //return a;
}
 
int main()
{
//將函數glFun的地址賦值給變量pFun
    pFun = glFun;
//*pFun」顯然是取pFun所指向地址的內容,
固然也就是取出了函數glFun()的內容,而後給定參數爲2。
    (*pFun)(2);
    //pfun(2);  也是對的
    return 0;
}

函數指針類型

語法

typedef 返回類型 (*函數名) (參數表);code

例:內存

#include <iostream>
 
using namespace std;
//定義一個函數指針類型
typedef char (*mypFun)(int);
//定義一個返回類型爲char,參數爲int的函數
//從指針層面上理解該函數,即函數的函數名其實是一個指針,
//該指針指向函數在內存中的首地址
char glFun(int a)
{
    cout << a;
    //return a;
}
 
int main()
{
//定義一個函數指針變量,將函數glFun的地址賦值給變量myp
    mypFun myp = glFun;
//*pFun」顯然是取pFun所指向地址的內容,
//固然也就是取出了函數glFun()的內容,而後給定參數爲2。
    (*myp)(2);
    //myp(2);  也是對的
    return 0;
}

歷史與邏輯

(*myp)(2);	//下文用 星myp表示
myp(2);  
//兩種寫法都是對的

真是很是棒的語法! 爲什麼 myp 和 ( 星 myp)等價呢?一種學派認爲,因爲 myp 是函數指針,而 ( 星 myp)是函數,所以應將 ( 星 myp)() 用做函數調用。另外一種學派認爲,因爲函數名是指向該函數的指針,指向函數的指針的行爲應與函數名類似,所以應將 myp() 用做函數調用使用。C++ 進行了折衷——這 2種方式都是正確的,或者至少是容許的,雖然它們在邏輯上是互相沖突的。在認爲這種折衷粗糙以前,應該想到,容忍邏輯上沒法自圓其說的觀點正是人類思惟活動的特色。io

相關文章
相關標籤/搜索