我是新來的C語言和指針,我這個函數聲明困惑:這是一個無效的指針?鑄件?它在做什麼?
void someFunction(int (*)(const void *, const void *));
任何人都可以在通俗地說解釋這是什麼一樣,它是如何工作的?
我是新來的C語言和指針,我這個函數聲明困惑:這是一個無效的指針?鑄件?它在做什麼?
void someFunction(int (*)(const void *, const void *));
任何人都可以在通俗地說解釋這是什麼一樣,它是如何工作的?
這是一個函數的原型,需要:
指向一個函數,它接受一個
const void*
和const void*
作爲參數,並返回一個int
作爲參數,並返回void
。
它是一個具有單一參數的函數。該參數是一個指向函數的指針,該函數返回一個int值,並將這兩個void指針指向常量數據參數。
它聲明一個函數,它將另一個函數作爲它的參數,並且不返回任何內容。其他功能將被宣佈爲
int otherfunction(const void *, const void *);
,你會打電話somefunction()這樣的:
somefunction(otherfunction);
這是取function pointer作爲其參數的函數的聲明。在其最基本的形式,它看起來像這樣:
void someFunction(argument_type);
哪裏argument_type
是int (*)(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;
}
Check this複雜聲明處理時非常有幫助。
我覺得你有太多'('在你複製的代碼中,你會檢查並修改嗎? –
啊是的,謝謝你發現 – user1086516