我有一個函數指針的問題。我有這個typedef:如何正確使用函數指針
typedef struct patchwork *(*create_patchwork_value_fct)
(const enum nature_primitif);
它是通用的(在另一個文件中實現)。我想用輸入來調用它。我該怎麼做 ?
我有一個函數指針的問題。我有這個typedef:如何正確使用函數指針
typedef struct patchwork *(*create_patchwork_value_fct)
(const enum nature_primitif);
它是通用的(在另一個文件中實現)。我想用輸入來調用它。我該怎麼做 ?
您需要
typedef
版函數指針的類型的變量。僞代碼
如果你有一個像
struct patchwork * funccall(const enum nature_primitif)
{
//do something
}
,然後一個功能,你可以做
create_patchwork_value_fct fp= funccall;
struct patchwork * retptr = NULL;
enum nature_primitif enumVal = <some enum value>;
retptr = fp(enumVal);
也許你可以閱讀this answer得到一些更深入的瞭解。
我錯過了什麼嗎?不是create_patchwork_value_fct typedef,而不是func ptr本身? – mjs
後來三次編輯,他說得對;-) –
@mjs我錯了,糾正了。 :-) –
這心不是實際上是一個函數指針 - 這是定義一個函數指針類型:
typedef struct patchwork *(*create_patchwork_value_fct) (const enum nature_primitif);
所以,這定義了一個名爲create_patchwork_value_fct
函數指針類型。這是一個指向一個函數的函數指針,它接受一個參數(const enum nature_primitif),並返回一個struct patchwork*
- 即指向拼湊結構的指針。
讓我們看看這到底是怎麼使用:
void someFunc(create_patchwork_value_fct funcToCall, enum param)
{
funcToCall(param);
}
struct patchwork* CreateAPatchworkValue(enum nature_primitif enumVal)
{
struct patchwork* pwork = malloc(sizeof(struct patchwork));
pwork->someVal = enumVal;
return pwork;
}
void main()
{
someFunc(CreateAPatchworkValue, <a valid nature_primitif enumeration value>)
}
在這個例子中,main()
電話someFunc()
,指針傳遞到CreateAPatchworkValue爲funcToCall
參數,並從nature_primitif枚舉值。
someFunc然後調用funcToCall,它實際上是對CreateAPatchworkValue的調用。
這個函數指針typedef的工作方式與您執行'typedef int * obscure_t; ... obscure_t ptr =&some_int;' – Lundin