我看到這個在我的教授爲一個項目提供的.h文件中的一個,但我不太清楚這意味着什麼。這個聲明的含義是什麼?
int (*get_console_dev)(void);
是不是一樣
(int*) get_console_dev(void);
(名爲get_console_dev函數,它返回一個指向int
?)
感謝
我看到這個在我的教授爲一個項目提供的.h文件中的一個,但我不太清楚這意味着什麼。這個聲明的含義是什麼?
int (*get_console_dev)(void);
是不是一樣
(int*) get_console_dev(void);
(名爲get_console_dev函數,它返回一個指向int
?)
感謝
int (*get_console_dev)(void)
是一個函數指針聲明。 get_console_dev
是一個變量,它可以保存對與特定簽名匹配的函數的引用。
int consoleFunction(void);
// ...
int (*get_console_dev)(void);
get_console_dev = consoleFunction;
該聲明與(int*) get_console_dev(void);
不一樣。
請使用cdecl進行確認。
聲明一個函數指針的意圖/好處是什麼?只要有人可以將它設置爲某個你不關心的值,因爲所有你需要的是一個函數,返回一個整數> – user1508893
只是一個例子:你想設置一個[_function callback_](http://en.wikipedia.org/wiki/Callback_%28computer_programming%29),例如來處理一個GUI事件。函數指針允許您引用處理函數,並將其傳遞給另一個函數。另一個:允許您在數據結構中傳遞一個函數,即一個具有對數據進行操作的函數的'struct' [另請參閱]( http://en.wikipedia.org/wiki/Function_pointer) – pb2q
我明白了。感謝您的解釋! – user1508893
這是一個函數指針,可以指向到返回int
並取0個參數的函數;它不等同於您發佈的第二行。
int(* get_console_dev)(void);
這是指針指針函數,沒有參數,返回類型爲整數。
(int *)get_console_dev(void);
這是沒有參數和返回類型作爲整數類型指針的函數。
兩者完全不同。
請閱讀函數指針。它是一個指向函數的指針,它使用void(作爲參數)並返回整數
http://cdecl.org/和http://c-faq.com/decl/spiral.anderson.html應該做一些簡短的工作您遇到的任何其他未知的聲明。 – chris
如果它在標題中,是不是應聲明爲'extern'或'static'? – sepp2k
@ sepp2k不,爲什麼它需要'extern'?如果它是靜態的,你爲什麼要把它放在一個.h文件中? (因爲從技術上來說,在文件之外不能使用任何'static' – user1508893