我有一个函数指针的问题。我有这个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