如何在C中的结构中使用函数指针?

时间:2012-01-14 02:09:34

标签: c struct function-pointers

我正在努力做的事情非常简单,我只是在弄清楚正确的语法。

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

struct myStruct
{
   functionPointer myPointer;
}

然后我在其他地方有另一个函数将函数传递给函数并返回我的struct的实例。这是它的作用:

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

我怎样才能让它真正起作用?什么是正确的语法:

  1. 在我的struct中声明一个函数指针(显然functionPointer myPointer;不正确)
  2. 为该函数指针指定函数的地址(非常确定c.myPointer = foo不正确)?

2 个答案:

答案 0 :(得分:3)

它与函数指针的任何其他实例没有什么不同:

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

虽然通常会使用typedef来整理一下。

答案 1 :(得分: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实际上不是正确的类型。所以,问题是 - 结构中函数指针的正确类型是什么?这取决于你想要它做什么。