2012-09-16 209 views
1

我看到這個在我的教授爲一個項目提供的.h文件中的一個,但我不太清楚這意味着什麼。這個聲明的含義是什麼?

int (*get_console_dev)(void); 

是不是一樣

(int*) get_console_dev(void); 

(名爲get_console_dev函數,它返回一個指向int?)

感謝

+1

http://cdecl.org/和http://c-faq.com/decl/spiral.anderson.html應該做一些簡短的工作您遇到的任何其他未知的聲明。 – chris

+1

如果它在標題中,是不是應聲明爲'extern'或'static'? – sepp2k

+0

@ sepp2k不,爲什麼它需要'extern'?如果它是靜態的,你爲什麼要把它放在一個.h文件中? (因爲從技術上來說,在文件之外不能使用任何'static' – user1508893

回答

3

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進行確認。

+0

聲明一個函數指針的意圖/好處是什麼?只要有人可以將它設置爲某個你不關心的值,因爲所有你需要的是一個函數,返回一個整數> – user1508893

+0

只是一個例子:你想設置一個[_function callback_](http://en.wikipedia.org/wiki/Callback_%28computer_programming%29),例如來處理一個GUI事件。函數指針允許您引用處理函數,並將其傳遞給另一個函數。另一個:允許您在數據結構中傳遞一個函數,即一個具有對數據進行操作的函數的'struct' [另請參閱]( http://en.wikipedia.org/wiki/Function_pointer) – pb2q

+0

我明白了。感謝您的解釋! – user1508893

7

這是一個函數指針,可以指向到返回int並取0個參數的函數;它不等同於您發佈的第二行。

0

int(* get_console_dev)(void);

這是指針指針函數,沒有參數,返回類型爲整數。

(int *)get_console_dev(void);

這是沒有參數和返回類型作爲整數類型指針的函數。

兩者完全不同。

0

請閱讀函數指針。它是一個指向函數的指針,它使用void(作爲參數)並返回整數