可能重复:
如何使用函数指针数组?
我想知道如何在 C 中声明函数指针的动态列表?使用指向函数指针的指针?
指向函数指针的指针,您可以使用它来指向动态分配的内存块。假设函数类型是void (int)
:
void (*(*))(int) // Bare type
void (*(*f))(int) // Variable
或者您可能需要一个数组来指向函数指针,在这种情况下:
void (*[10])(int) // Bare type
void (*af[10])(int) // Variable
您可以更改函数的参数和返回类型。
函数指针数组可以用作从数字到要执行的函数的映射。这是进行仿真的一种方法——例如,在您从指令中获取操作码后,您可以使用指针数组执行操作。(这是这样做的一种方法,但我不确定它是否实际上是在仿真代码中完成的)。
是的,您可以拥有一组函数指针。
这可能很有用,例如用于为特定事件收集一组回调函数。
例如,考虑addEventListener
在浏览器中实现 DOM 元素,其中任何 DOM 元素都可以有多个click
事件。一个简单的数据结构可能是:
void (*clickHandlers[MAX_EVENT_HANDLERS])(EventData arg);
对于动态列表,然后使用分配函数指针缓冲区malloc
,并且realloc
您需要更多空间:
void (**clickHandlers)(EventData arg);
对于动态列表,您可以使用基本链表:
struct list {
int (*func)(int, float, double);
struct list *next;
}
或根据需要调整大小的函数指针数组。