關於函式指標

2022-04-29 17:30:07 字數 2126 閱讀 7752

之前去面試的時候被問道過函式的指標**函式。都沒有回答上來==

1.回顧下c++primer 的7.9節 指向函式的指標(順便回顧下第七章)

2.**函式

3.動態建立物件

1.函式指標是指向函式型別的指標。而函式型別只由返回型別以及形參表確定,跟函式名字無關。

用typedef簡化函式指標的定義:

//使用typedef簡化   定義函式指標p1和p2  一勞永逸~~~~

typedef bool (*funp) (const string& , int);  

funp p1;  

funp p2;

//不使用typedef    定義函式指標p3和p4  

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

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

函式指標的初始化和賦值:只能通過同型別的函式或者是函式指標(不同函式型別的指標不存在轉化)或者0值常量(表示不指向任何函式)進行初始化或者賦值

除了用作函式呼叫的左運算元外,對funp的任何使用都被解釋為指標型別:bool  funp (const string&, int)------>bool(*) (const string&, int);  

bool fun(const string&, int);

p1 = 0;

p2 = fun; //函式名自動解釋為函式指標型別。就像陣列名直接解釋為陣列指標?

p3 = &fun;//直接引用函式名等效於在函式名上應用取位址操作符;

p4 = p3;

通過指標呼叫函式:函式指標可以呼叫它所指向的函式(前提就是該指標已經初始化或者是賦值給了乙個函式)

fun("sleep", 8);

p2("sleep",8);//隱式解引用

(*p2)("sleep",8);//顯示解引用

函式指標形參:形參的兩種表示方法

bool function(const string&, int,bool(*) (const string&, int))或者是bool function(const string&, int,bool (const string&, int))

返回指向函式的指標:

int (*ff(int))(int *, int);//ff是乙個函式名,形參是int,返回型別是函式指標。此函式指標是乙個指向「返回型別為int,參數列為(int*,int)」的函式

等價於typedef int (*pf)(int *, int);

pf ff(int);//允許將形參定義為函式型別,但是返回型別不允許是函式型別,只能是指向函式的指標。類似的不能返回陣列,只能返回陣列元素的指標

指向過載函式的指標:指標的型別必須與過載函式的乙個版本精確匹配。如果沒有,則對該指標的初始化和賦值都將導致編譯失敗。

2.**其實就是一種利用函式指標進行函式呼叫的過程。**函式就是函式指標的一種用法?!

程式退出時的**函式:當程式通過呼叫exit()或從main 中返回時, **函式中引數function 所指定的函式會先被呼叫, 然後才真正由exit()結束程式。_onexit與atexit,其定義如下:先進後出的原則&並關注被呼叫函式的型別。

atexit: 返回型別void 引數void

_onexit:返回型別int 引數void

stl中眾多演算法和程式都用到**:如

不想在排序函式中嵌入排序邏輯,而讓使用者來實現相應的邏輯;或者,想讓庫可用於多種資料型別(int、float、string),此時就可以使用函式指標,並進行**。

**函式用於實現通知機制。

下面兩篇是講解 指向類成員的函式指標的,以及基本的函式指標

下面是一篇用函式指標和模版 來實現 簡單的委託的機制

函式指標 關於函式指標與指標函式

指標函式顧名思義,本質還是函式,不同的是改函式的返回型別為指標型別。接下來我們舉個例子。include using namespace std char output intmain 這裡的char output 就是個指標函式 char 的函式,即返回值為char 型別的。這裡的 如果gcc g ...

關於函式指標與指標函式

函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...

關於函式指標

函式存放在記憶體的 區域內,它們同樣有位址,我們如何能獲得函式的位址呢?如果我們有乙個int test int a 的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。定義乙個指向函式的指標用如下的形式,以上面的test 為例 int fp int a 這裡就定義...