C 如何正确使用函数指针
我对函数指针有问题。我有这个类型:C 如何正确使用函数指针,c,function-pointers,typedef,C,Function Pointers,Typedef,我对函数指针有问题。我有这个类型: typedef struct patchwork *(*create_patchwork_value_fct) (const enum nature_primitif); 这是通用的(在另一个文件中实现)。我想用输入调用它。我该怎么办?你需要 定义typedefed函数指针类型的变量 将具有相同签名的函数的地址放入其中 使用变量作为普通函数名进行函数调用 伪码 如果你有
typedef struct patchwork *(*create_patchwork_value_fct)
(const enum nature_primitif);
这是通用的(在另一个文件中实现)。我想用输入调用它。我该怎么办?你需要
typedef
ed函数指针类型的变量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);
create\u patchwork\u value\u fct fp=funccall;
结构修补*retptr=NULL;
enum nature_primitif enumVal=;
retptr=fp(枚举值);
也许您可以阅读以获得更多信息。这实际上不是函数指针-这是定义函数指针类型:
typedef结构补丁*(*创建补丁\u值\u fct)
(const enum nature_primitif)代码>
因此,这定义了一个名为create\u patchwork\u value\u 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>)
}
void someFunc(创建\u补丁\u值\u fct函数调用,枚举参数)
{
函数调用(param);
}
结构修补*CreateAPatchworkValue(枚举性质\u原始枚举值)
{
结构修补*pwork=malloc(sizeof(结构修补));
pwork->someVal=枚举值;
返回工作;
}
void main()
{
someFunc(CreateAPatchworkValue,)
}
在本例中,main()
调用someFunc()
,将createApachWorkValue指针作为funcToCall
参数传递给它,并从nature\u primitif枚举传递一个值
someFunc然后调用funcToCall,这实际上是对CreateAPatchworkValue的调用。我缺少什么吗?难道不是创建一个类型定义,而不是函数本身吗?@DaanTimmer是的,我是正确的。不过多亏了mjs.:-)此函数指针typedef的工作原理与执行typedef int*undersome\u t;时完全相同。。。晦涩的\u t ptr=&some\u int代码>