如何正确使用函数指针

时间:2015-05-27 09:06:52

标签: c function-pointers typedef

我的函数指针有问题。我有这种typedef:

typedef struct patchwork *(*create_patchwork_value_fct) 
                                            (const enum nature_primitif);

这是通用的(在另一个文件中实现)。我想用输入调用它。我该怎么办?

2 个答案:

答案 0 :(得分:1)

你需要

  1. 定义typedef ed函数指针的类型的变量。
  2. 将具有相同签名的函数的地址放在其中。
  3. 将变量用作普通函数名称以进行函数调用。
  4. 伪代码

    如果你有像

    这样的功能
    struct patchwork * funccall(const enum nature_primitif)
    {
      //do something
    }
    

    然后,你可以做到

    create_patchwork_value_fct fp= funccall;
    struct patchwork * retptr = NULL;
    enum nature_primitif enumVal = <some enum value>;
    
    retptr = fp(enumVal);
    

    也许您可以阅读this answer以获得更多见解。

答案 1 :(得分:0)

这实际上不是函数指针 - 这是定义函数指针类型:

typedef struct patchwork *(*create_patchwork_value_fct) (const enum nature_primitif);

因此,这定义了一个名为create_patchwork_value_fct的函数指针类型。这是一个函数指针,该函数指向一个带有单个参数的函数(const enum nature_primitif),并返回一个struct patchwork* - 即指向拼凑结构的指针。

让我们看看如何使用它:

void someFunc(create_patchwork_value_fct funcToCall, enum param)
{
    funcToCall(param);
}

struct patchwork* CreateAPatchworkValue(enum nature_primitif enumVal)
{
     struct patchwork* pwork = malloc(sizeof(struct patchwork));
     pwork->someVal = enumVal;
     return pwork;
}


void main()
{
    someFunc(CreateAPatchworkValue, <a valid nature_primitif enumeration value>)
}

在此示例中,main()调用someFunc(),向其传递一个指向CreateAPatchworkValue的指针作为funcToCall参数,以及一个来自nature_primitif枚举的值。

someFunc然后调用funcToCall,这实际上是对CreateAPatchworkValue的调用。

相关问题