【问题标题】:What about functions pointer list? [duplicate]函数指针列表呢? [复制]
【发布时间】:2012-08-02 14:47:42
【问题描述】:

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

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

【问题讨论】:

  • 请注意,cdecl.org 对于这些事情非常有用:搜索“返回 int 的函数指针数组 5(int、float、double)”为您提供了一个静态列表示例。

标签: c function pointers function-pointers


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 在你的第一段代码 void ()(int) 如何添加我的列表变量名?
  • 编辑回答您的问题。
  • 谢谢,但现在我应该如何使用指向函数指针的指针调用函数?
  • 您的第一个代码是一个指向返回指针的函数的指针。不是指向返回 void 的函数的指针。您的第二个代码是指向函数数组的指针,这是非法的。
  • @newacct:已修复。想要轰炸答案,但我还是修复了它,因为它被接受了。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    是的,你可以有一个函数指针数组。

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

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

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

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

    void (**clickHandlers)(EventData arg);
    

    【讨论】:

    • 是的,但我的问题是如何声明这个“函数指针缓冲区”
    • 第二个错误。它是一个指向返回指针的函数的指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2011-04-12
    • 2018-08-27
    • 2017-02-09
    • 2018-10-11
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多