【发布时间】:2012-08-02 14:47:42
【问题描述】:
【问题讨论】:
-
请注意,cdecl.org 对于这些事情非常有用:搜索“返回 int 的函数指针数组 5(int、float、double)”为您提供了一个静态列表示例。
标签: c function pointers function-pointers
【问题讨论】:
标签: c function pointers function-pointers
指向函数指针的指针,您可以使用它来指向动态分配的内存块。假设函数类型是void (int):
void (*(*))(int) // Bare type
void (*(*f))(int) // Variable
或者你可能想要一个数组来指向函数指针,在这种情况下:
void (*[10])(int) // Bare type
void (*af[10])(int) // Variable
您可以更改函数的参数和返回类型。
函数指针数组可以用作从数字到要执行的函数的映射。这是进行仿真的一种方法——例如,在您从指令中获取操作码后,您可以使用指针数组执行操作。 (这是一种方法,但我不确定它是否真的在仿真代码中完成)。
【讨论】:
对于动态列表,可以使用基本链表:
struct list {
int (*func)(int, float, double);
struct list *next;
}
或根据需要调整大小的函数指针数组。
【讨论】:
是的,你可以有一个函数指针数组。
这可能很有用,例如为特定事件收集一组回调函数。
例如,考虑在浏览器中为 DOM 元素实现 addEventListener,其中任何 DOM 元素都可以有多个 click 事件。一个简单的数据结构可能是:
void (*clickHandlers[MAX_EVENT_HANDLERS])(EventData arg);
对于 动态 列表,然后使用 malloc 和 realloc 分配函数指针缓冲区,因为您需要更多空间:
void (**clickHandlers)(EventData arg);
【讨论】: