我一直在C++中使用函數指針,我一直聲明它們爲void (*function)(void)
。這是我最初在教程和how tutorials still teach it中看到的。今天替代函數語法/函數原型?
但是,我正在讀維基百科文章關於高階函數時,我使用的是備用的語法,其中*
和包圍該函數指針的變量/類型名稱的括號不存在發現了一個例子,如圖here。
我測試過,看錶格void function(void)
是否適用於變量,參數和typedefs。它不適用於變量,但它適用於參數和typedef,沒有明顯的變化,實際上可以與標準函數指針語法互換。
我挖了一點,發現an SO question似乎暗示它是'函數原型'而不是函數指針的語法。然而wikipedia's explanation of function prototypes聽起來很像只是預先聲明的函數。
對於我的問題的廣泛範圍,我很抱歉,但是這個語法究竟是什麼?
- 它定義了「函數原型」還是函數指針?
- 如果它是一個函數原型,函數指針和功能 原型相同還是它們只是表現相同?
- 如果它不是一個函數原型那是否意味着'函數原型' 只是函數的預先聲明?
- 如果此語法與標準函數指針 的語法等效,爲什麼更常用的教學形式是更詳細的(並且可以說難以閱讀)語法 ?
- 語法是否產生不同的結果/有不同的含義 和我有點不知道?
在移動所以不打算寫一個完整的答案,但你展示語法僅在typedef工作。這一切都是一團糟! –
你經常看到函數指針的地方是一個參數('void(* param)()')。這是寫'void param()'的一種情況,它的作用與'int [N]'相同,因爲函數參數實際上是'int *',但在其他地方不同。 – chris
@chris我只是雙重檢查,似乎我忘了測試變量的情況。當我開始進行更多的研究並編寫這個問題時,我寫了一半的內容,所以我忘了我沒有真正按下編譯按鈕。我已經在我的問題中解決了這個錯誤。 – Pharap