C 函式指標語法總結
阿新 • • 發佈:2020-10-11
C 函式指標語法總結
函式指標
定義
每一個函式都佔用一段記憶體單元,它們有一個起始地址,指向函式入口地址的指標稱為函式指標。
注意:函式指標的本質是一個指標變數,且指標指向的函式的入口地址。
語法
返回型別 (*函式名) (引數表);
例:
#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 返回型別 (*函式名) (引數表);
例:
#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種方式都是正確的,或者至少是允許的,雖然它們在邏輯上是互相沖突的。在認為這種折衷粗糙之前,應該想到,容忍邏輯上無法自圓其說的觀點正是人類思維活動的特點。