0

可能重复:
如何使用函数指针数组?

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

4

3 回答 3

2

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

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

或者您可能需要一个数组来指向函数指针,在这种情况下:

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

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

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

于 2012-08-02T14:53:35.183 回答
1

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

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

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

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

对于动态列表,然后使用分配函数指针缓冲区malloc,并且realloc您需要更多空间:

void (**clickHandlers)(EventData arg);
于 2012-08-02T14:53:27.257 回答
1

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

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

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

于 2012-08-02T14:55:03.113 回答