指向函式的指標

2021-06-23 02:13:24 字數 1680 閱讀 3853

整理自《c++ primer 第四版》

函式指標是指向函式的指標變數。其指向的函式型別有函式返回型別以及形參表確定。

bool (*pf)( const string &, const string & );

1、用typedef簡化函式指標的定義

我們可以使用typedef為指標型別定義同義詞:

typedef bool (*cmpfcn)( const string &, const string & );

則可以用其定義指標變數:

cmpfcn  pf1;

2、初始化和賦值

只有當賦值操作符左邊指標的參數列和返回型別與右邊函式或指標的參數列和返回型別

完全匹配時初始化和賦值才是正確的。如果不匹配則將產生編譯錯誤訊息,在指向函式

型別的指標之間不存在隱式型別轉換。

假設有以下函式:

bool lengthcompare( const string &, const string & );
則可以使用函式名對函式指標做初始化或賦值:

cmpfcn pf1 = 0;

cmpfcn pf2 = lengthcompare;

pf1 = lengthcompare;

pf2 = pf1;

注:(1)直接引用函式名等效於在函式名上應用取位址操作符。

(2)將函式指標初始化為0,表示該指標不指向任何函式。

3、通過指標呼叫函式

可以不需要使用解引用操作符,直接通過指標呼叫函式:

cmpfcn pf = lengthcompare;

pf("hi","bye");

(*pf)("hi","bye");

4、函式指標形參

函式的形參可以使指向函式的指標,也可以是函式型別。

//形參是指向函式的指標

void usebigger(const string &, const string &,

bool (*)(const string &,const string &));

//形參是函式型別

void usebigger(const string &, const string &,

bool (const string &,const string &));

注意,函式型別和函式指標的區別。

typedef int func1(int*, int);//定義func1為函式型別

typedef int *func2(int*,int);//定義func2為函式指標

5、返回指向函式的指標

int (ff(int))(int*, int);
上述宣告將ff宣告為乙個帶有int型形參的函式,其返回int (*)(int*, int); 他是乙個指向函式的指標。

使用typedef可使該定義更簡明易懂:

typedef int (*pf)(int*, int);

pf ff(int);

指向函式的指標 函式指標

如果在程式中定義了乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始 又稱入口 位址 稱為這個函式的指標。指標即是位址 我們定義乙個指標變數,這個指標變數指向乙個整型資料變數的位址,我們稱指向乙個整型資料的指標變數 那麼它指向乙個函式的位址,稱為指向乙個函式的指標變數。形如 i...

函式指標 指向函式的指標

乙個函式總是占用一段連續的記憶體區域,函式名在表示式中有時也會被轉換為該函式所在記憶體區域的首位址,這和陣列名非常類似。我們可以把函式的這個首位址 或稱入口位址 賦予乙個指標變數,使指標變數指向函式所在的記憶體區域,然後通過指標變數就可以找到並呼叫該函式。這種指標就是函式指標。函式指標的定義形式為 ...

指向函式的指標,指向函式的指標作為函式引數

1.基本法 include pragma warning disable 4996 pragma warning disable 4715 指向函式的指標作為函式的引數 有兩個整數a,b,讓使用者輸入1,2或者3,當輸入1時,給出相對大值,當輸入2時,給出相對小值,當輸入3時,給出兩者之和 1.可以...