【问题标题】:How to use function pointers in a struct in C?如何在 C 中的结构中使用函数指针?
【发布时间】:2012-01-14 02:09:34
【问题描述】:

我想要做的事情非常简单,我只是在找出正确的语法时遇到了麻烦。

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

struct myStruct
{
   functionPointer myPointer;
}

然后我在其他地方有另一个函数,它将一个函数传递给一个函数并返回我的结构的一个实例。它的作用如下:

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

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

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

【问题讨论】:

标签: c struct function-pointers


【解决方案1】:

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

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

虽然经常有人会使用typedef 来整理一下。

【讨论】:

    【解决方案2】:

    或多或少:

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

    【讨论】:

    • 你的结构包含一个指向函数的指针,它返回你的结构,它带有一个指向另一个函数的指针,它返回一个带有指向 void 的 int?我的头好痛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多