天天看點

函數指針

程式中每個函數都位于記憶體中的某個位置,是以存在指向那個位置的指針------函數指針。

  函數指針最常用的兩個地方是:轉換表和作為參數傳遞給領一個函數。和其他的指針一樣,對函數指針執行間接通路之前必須把它初始化為指向某個函數。

這段代碼告訴我們,建立了一個函數指針,并把它初始化為指向函數f。函數指針的初始化也可以通過一條指派語句來完成。在函數指針初始化之前,具有f的原形是很重要的,否則編譯器就無法檢查f的類型是否與pf所指向的類型一緻。

初始化表達式中的&操作符是可選的,因為函數名被使用時總是有編譯器把它轉化為函數指針。&操作符隻是顯式的說明了編譯器将隐式執行的任務。

第2條語句是簡單的調用函數f,但是它的執行過程确實很複雜的。函數名f首先被轉換為一個函數指針,該指針指定函數在記憶體中的位置。然後函數調用操作符調用該函數,執行開始于這個位址代碼。

第3條語句是對pf執行期間間接通路操作,他把函數指針轉換為一個函數名。這個轉換并不是真正需要的,因為在編譯器執行函數調用操作符之前又會把它轉回去。這條語句和前一條語句完全一緻。

第4條語句和前兩條語句效果一緻。間接通路操作并非必須,因為編譯器需要的是一個函數指針。

本文轉自NewPanderKing51CTO部落格,原文連結:http://www.cnblogs.com/newpanderking/p/3833928.html ,如需轉載請自行聯系原作者

繼續閱讀