函数指针列表怎么样?

时间:2012-08-02 14:47:42

标签: c function pointers function-pointers

  

可能重复:
  how to use array of function pointers?

我想知道如何在C中声明一个动态函数指针列表?使用指向函数指针的指针?

3 个答案:

答案 0 :(得分:2)

指向函数指针的指针,您可以使用该指针指向动态分配的内存块。假设函数类型为void (int)

void (*(*))(int) // Bare type
void (*(*f))(int) // Variable

或者你可能想要一个数组来运行指针,在这种情况下:

void (*[10])(int) // Bare type
void (*af[10])(int) // Variable

您可以更改参数和函数的返回类型。

函数指针数组可用作从数字到要执行的函数的映射。这是进行仿真的一种方法 - 例如,从指令中获取OP代码后,可以使用指针数组执行操作。 (这是一种方法,但我不确定它是否实际上是在仿真代码中完成的。)

答案 1 :(得分:1)

是的,您可以拥有一系列函数指针。

这可能很有用,例如为特定事件收集一组回调函数。

作为示例,请考虑在浏览器中对DOM元素实施addEventListener,其中任何DOM元素都可以有多个click事件。一个简单的数据结构可能是:

void (*clickHandlers[MAX_EVENT_HANDLERS])(EventData arg);

对于动态列表,然后使用mallocrealloc分配函数指针的缓冲区,因为您需要更多空间:

void (**clickHandlers)(EventData arg);

答案 2 :(得分:1)

对于动态列表,您可以使用基本链接列表:

struct list {
   int (*func)(int, float, double);
   struct list *next;
}

或者根据需要调整大小的函数指针数组。