Function pointer 函式指標

2021-07-24 21:56:56 字數 1189 閱讀 2361

英文: function pointer

中文: 函式指標

介紹: 函式指標是指向函式的指標變數。 因而「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,但這裡是指向函式。如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。函式指標有兩個用途:

1. 呼叫函式

2. 做函式的引數

我們都知道,陣列名就是指向陣列第乙個元素的常量指標。同理,對於乙個函式而言,==函式名也是指向函式第一條指令的常量指標==。而編譯器要做的就是在程式編譯之後,為每個函式分配乙個首位址,即該函式第一條指令的位址。一般情況下,我們可以用乙個指標來儲存這個位址,而這個指標就是函式指標,該指標可以看作是它指向函式的別名,所以我們可以用該指標來呼叫這個函式。

返回值型別 (*指標變數名)([形參列表]);
注:「返回值型別」說明函式的返回型別,==「(指標變數名 )」中的括號不能省==,括號改變了運算子的優先順序。若省略該語句成為乙個指標函式的說明,說明了乙個返回的資料型別是指標的函式,後面的「形參列表」表示指標變數指向的函式所帶的引數列表。 例:

int func(int x);  // 宣告乙個函式

int (*f)(int x); // 宣告乙個函式指標,也可以寫成int (*f) (int)

f = func; // 將func函式的首位址賦給指標f

f = &func; // 效果與上方一樣

#include

int max(int x,int y)

int main()

需要注意的是對於函式函式指標的賦值和使用:

f = func;  // 初始化方法一 

f = &func; // 初始化方法二

(*f)(a); // 使用方法一

(f)(a); // 使用方法二

上述兩種初始化和使用方法都是正確的,與指標方面可能有所區別,func代表乙個函式名,用它進行賦值自然傳遞的是相應的函式位址,而&func毫無疑問也就是相應的函式位址,能這樣設計的原因可能是為了操作方便吧。

pthread create使用類中函式指標的

原有的程式是利用一台pc機的共享記憶體來實現兩個程式間的通訊的,最近要求改了,要設計2臺pc間這兩個的程式的通訊,想把通訊部分的程式做成類封裝起來。其中,由於要有多執行緒的部分。就是說,可能在乙個執行緒裡讀,在另乙個執行緒裡寫。所以得用到類成員函式的函式指標部分。為了驗證可行性,編寫了下面的程式 c...

劍指Offer Python 包含min函式的棧

題目 棧的壓入 彈出序列 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 ...

5 指標與函式

c語言中值傳遞的本質是,當呼叫被調函式時,被調函式會在自己的函式棧中開闢相同型別的形參空間,並且將傳遞過來的值寫入形參空間儲存。傳遞位址和普通傳參沒有本質的區別。傳遞位址和普通傳參都是值傳遞,實參是數值,也可以是變數。數值沒有普通值傳遞,因為普通值傳遞需要的形參空間大,效率低,所以只有位址傳遞。四種...