什麼是用C void (*)()
類型++,怎麼投一個INT這種類型,我發現它的功能是這樣的:什麼是無效(*)()類型,以及如何轉換爲這種類型
function(const char*, long int, void (*)());
什麼是用C void (*)()
類型++,怎麼投一個INT這種類型,我發現它的功能是這樣的:什麼是無效(*)()類型,以及如何轉換爲這種類型
function(const char*, long int, void (*)());
在C/C++中,'maximum munch'規則適用於評估表達式:從起點向左儘可能多地得到一個有效的表達式,然後向右走。
這是一個--- B如何轉化爲(A - ) - B,而不是一個 - ( - B)
回到你的表達
void (*)()
(*)
- >你有一個指針(*)()
- >你有指向函數什麼沒有參數void (*)()
- >你有指向函數什麼不帶 參數並且不返回值所以,你的函數被傳遞給一個沒有參數的函數的指針,它什麼都不返回。傳遞指針時要小心,因爲它需要完全匹配(返回類型和全部)。
現在,至於爲什麼你會想這樣做,我可以給你一個實際的例子:pthred_create
函數原型:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
無效*的start_routine()是胎面將運行什麼(就像它是主要的),這就是爲什麼create函數需要這個函數指針。 某些API使用此方法以獲得更大的靈活性
它是一個函數指針:一個沒有參數或返回值的函數的地址。
您無法將int
轉換爲此類型。它是一個指針傳遞給自己的代碼的函數調用:
void my_callback() {/* do something */}
function("Hello", 42, my_callback);
現在函數可以調用它的參數,就好像它是一個函數,調用與您的「回調」功能的效果。
嗨,我得到錯誤,說'無效轉換從'void(*)()'到'長整型' – user4016367 2015-03-02 12:12:24
@ user4016367:這聽起來像你傳遞一個函數,其中一個整數是預期的,要麼是因爲你得到的參數命令,或者忘了'()'是否打算叫它。檢查參數類型是否與函數聲明匹配。如果你無法弄清楚什麼是錯誤的,請發佈導致錯誤的代碼,這樣我們就不必猜測了。 – 2015-03-02 12:15:21
可能值得一提的是,'void(*)()'對於指針指向函數的指針的作用與'void *'指針指向數據的指針相同。 (然而這個用法是傳統的,這個標準保證了從一個指針到另一個指針到另一個指針的轉換,然後回到原始的,將會起作用。) – 2015-03-02 13:07:17
http://en.wikipedia.org/wiki/Function_pointer – 2015-03-02 12:07:48
它不是特定於C++,它也適用於C。 – rubikonx9 2015-03-02 12:15:16
@ g.tsh:除了在C中,類型將是'void(*)(void)'。 – MSalters 2015-03-02 13:29:18