如何在C中的结构中使用函数指针?
我想做的事情很简单,我只是很难找到正确的语法 我希望我的结构如下所示:如何在C中的结构中使用函数指针?,c,struct,function-pointers,C,Struct,Function Pointers,我想做的事情很简单,我只是很难找到正确的语法 我希望我的结构如下所示: struct myStruct { functionPointer myPointer; } 然后我在其他地方有另一个函数,它将一个函数传递给一个函数,并返回我的结构的一个实例。它的作用如下: struct myStruct myFunction(int (*foo) (void *)) { myStruct c; c.myPointer = foo; return c; } 我怎样才能让它真正起
struct myStruct
{
functionPointer myPointer;
}
然后我在其他地方有另一个函数,它将一个函数传递给一个函数,并返回我的结构的一个实例。它的作用如下:
struct myStruct myFunction(int (*foo) (void *))
{
myStruct c;
c.myPointer = foo;
return c;
}
我怎样才能让它真正起作用?正确的语法是什么:
functionpointermypointer;
不正确)c.myPointer=foo
不正确)它与函数指针的任何其他实例都没有什么不同:
struct myStruct
{
int (*myPointer)(void *);
};
尽管人们通常会使用typedef
来稍微整理一下这一点。或多或少:
struct myStruct
{
struct myStruct (*myPointer)(int (*foo)(void *));
};
typedef struct myStruct myStruct;
c.myPointer
应该可以,但是您需要返回结构的副本,而不是指向现在消失的局部变量c
的指针
struct myStruct
{
struct myStruct (*myPointer)(int (*foo)(void *));
};
typedef struct myStruct myStruct;
struct myStruct myFunction(int (*foo) (void *))
{
myStruct c;
c.myPointer = foo;
return c;
}
这可以编译,但编译器(合理地)抱怨
foo
实际上不是正确的类型。所以,问题是-结构中函数指针的正确类型是什么?这取决于您希望它做什么。如果您返回myStruct*,您应该分配(例如,使用malloc)并返回malloced值。如果返回myStruct,则应声明函数。(现在,您声明函数返回指针,但尝试返回结构。)的可能重复。另请参见,.Your struct包含指向返回您的struct的函数的指针,指向返回int的另一个函数的指针,指向void的指针?我头痛。