2012-01-14 26 views
4

这是非常简单的,我正在尝试去做,而我只是很难弄清楚正确的语法。如何在C中的struct中使用函数指针?

我希望我的结构看起来像这样:

struct myStruct 
{ 
    functionPointer myPointer; 
} 

然后,我有另一项功能,在其他地方是通过一个函数的函数,并返回我的结构的一个实例。以下是它的作用:

struct myStruct myFunction(int (*foo) (void *)) 
{ 
    myStruct c; 
    c.myPointer = foo; 
    return c; 
} 

我怎样才能使这个实际工作?什么是正确的语法:

  1. 在我的结构声明一个函数指针(显然functionPointer myPointer;是不正确的)
  2. 分配函数的地址给函数指针(很肯定c.myPointer = foo是不正确的)?
+0

如果你返回一个myStruct *,你应该分配(例如,使用malloc)并返回malloced值。如果你返回一个myStruct,你应该像这样声明你的函数。 (现在,你声明该函数返回一个指针,但你试图返回一个结构体。) – 2012-01-14 02:14:01

+0

[C中的函数指针]的可能重复(http://stackoverflow.com/questions/1278841/)。另请参见[函数指针作为C结构的成员](http://stackoverflow.com/questions/1350376/),[结构与指向函数的指针](http://stackoverflow.com/questions/2939003/) ,[typedef是你的朋友](http://stackoverflow.com/a/8028634/90527)。 – outis 2012-01-14 02:19:14

回答

3

这是一个函数指针的任何其他实例真的没有不同:

struct myStruct 
{ 
    int (*myPointer)(void *); 
}; 

虽然经常一个会用typedef整理了这一点。

0

或多或少:

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是不是真的正确的类型。所以,问题是 - 结构中函数指针的正确类型是什么?这取决于你想要做什么。

+1

你的结构体包含一个指向函数的指针,它返回的结构将一个指针指向另一个函数,返回一个int指针,指向void?我头疼。 – Dave 2012-01-14 05:03:23

相关问题