這個函數原型是怎麼回事?顯然帶有某種強制類型轉換的空參數是混亂...C-奇怪的原型參數
int *my_func(my_struct *m, void (*m_op)(my_struct *v, void arg));
這個函數原型是怎麼回事?顯然帶有某種強制類型轉換的空參數是混亂...C-奇怪的原型參數
int *my_func(my_struct *m, void (*m_op)(my_struct *v, void arg));
的第二個參數的功能my_func
是指向不返回值(void
)的功能,但它有兩個參數,一個my_struct
指針和...和(無效)void
。後者應該可能是void *arg
;您不能擁有void
類型的變量或參數。就目前來看,代碼不應該編譯。
該原型聲明函數my_func
,返回int *
。它有兩個參數,第一個是my_struct *
,第二個是奇怪類型void (*)(my_struct *, void)
。這意味着第二個參數是一個指向函數的指針,該函數返回void並帶有2個參數本身,指向my_struct
和void
(我認爲這是一個錯字,它需要void *
)。
我的建議 - 總是嘗試將聲明拆分成更小的聲明 - 在這種情況下,代碼將更具可讀性。在這種情況下,你可以重新寫代碼:
typedef struct {} my_struct;
typedef void (* m_op_function)(my_struct * v, void * arg);
int * my_func(my_struct * m, m_op_function f);
正如大家說 - 這幾乎是99.99%錯字這裏就以m_op_function-有可能第二個參數void*
- 這樣就可以傳遞任何指針它 - 它是(char*), (int*), (my_struct*)
,或其他任何東西。只需簡單地投射指針。
This little article解釋瞭如何解析螺旋狀運動中的C聲明。相反,構建是完成的。
在你最喜歡的C語言書中查找「函數指針」。 –
http://cdecl.org –