2011-12-07 48 views
1

我是新來的C語言和指針,我這個函數聲明困惑:這是一個無效的指針?鑄件?它在做什麼?

void someFunction(int (*)(const void *, const void *)); 

任何人都可以在通俗地說解釋這是什麼一樣,它是如何工作的?

+3

我覺得你有太多'('在你複製的代碼中,你會檢查並修改嗎? –

+0

啊是的,謝謝你發現 – user1086516

回答

3

這是一個函數的原型,需要:

指向一個函數,它接受一個const void*const void*作爲參數,並返回一個int

作爲參數,並返回void

0

它是一個具有單一參數的函數。該參數是一個指向函數的指針,該函數返回一個int值,並將這兩個void指針指向常量數據參數。

2

它聲明一個函數,它將另一個函數作爲它的參數,並且不返回任何內容。其他功能將被宣佈爲

int otherfunction(const void *, const void *); 

,你會打電話somefunction()這樣的:

somefunction(otherfunction); 
0

這是取function pointer作爲其參數的函數的聲明。在其最基本的形式,它看起來像這樣:

void someFunction(argument_type); 

哪裏argument_typeint (*)(const void *, const void *),它可以被描述爲一個「指針,它有兩個常量無效*參數,並返回一個int的函數」。即,具有以下聲明的任何函數:

int foo(const void *, const void *); 

爲了通過例子來說明:

int foo_one(const void * x, const void * y) { ... } 
int foo_two(const void * x, const void * y) { ... } 

void someFunction(int (*)(const void *, const void *) function_ptr) 
{ 
    const void * x = NULL; 
    const void * y = NULL; 
    int result; 
    result = (*function_ptr)(x, y); // calls the function that was passed in 
} 

int main() 
{ 
    someFunction(foo_one); 
    someFunction(foo_two); 
    return 0; 
} 
相關問題