Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中的结构中使用函数指针?_C_Struct_Function Pointers - Fatal编程技术网

如何在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的指针?我头痛。