程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c-指向函數的指針不需要定義?

c-指向函數的指針不需要定義?

編輯:編程綜合問答
指向函數的指針不需要定義?

我看《C程序設計語言》書,看到103頁時,有一個關於指向函數的指針把我看糊塗了。如圖所示圖片說明,函數指針就是裡面那個comp。可我找了半天也找不到它在哪裡定義的,那麼當調用它時它是怎麼轉換的呢?比如那個?:返回的是numcmp,那麼最後是怎麼轉到numcmp函數裡面呢?

最佳回答:


題主弄混了一個關鍵的概念:指向函數指針的本質是什麼,在這裡也就是您所說的comp。
請注意,這裡的comp其實是一個變量,一個指針變量。而不是樓主所認為的函數!它不需要包含任何代碼,因為它是一個指針變量。當這個comp被賦值以後【一般都是賦一個函數代碼段地址值】,那麼運行時,有關comp的代碼語句都會直接把comp換成這個地址值,比如您截圖中的numcmp,當把它賦值給comp以後,以後再遇到comp時,就會直接調用numcmp,而不是從comp“函數裡”轉到numcmp。

請題主看下面的圖片代碼:
圖片說明

相信您會看明白,這裡的ptr【comp的兄弟,另一個函數指針】,其實是完全被當成一個指針變量賦值的。
當然,也可以在聲明時就給ptr初始化,不過格式要寫成這樣:【int (*ptr)(int a, int b) = fun;】,至於ptr的後面為什麼要跟一對參數列表,只是為了在編譯時檢查錯誤,看看被指向的函數是不是跟指向函數指針聲明時相匹配。它雖然有參數表,但僅僅是貌似函數而已,記住,披著羊皮的狼,是狼,不是羊!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved