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種方式都是正確的,或者至少是允許的,雖然它們在邏輯上是互相沖突的,在認為這種折衷粗糙之前,應該想到,容忍邏輯上無法自圓其說的觀點正是人類思維活動的特點,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/168427.html
標籤:C++
下一篇:C 陣列型別語法總結
