C语言中的函数指针数组

8
我很难理解函数指针的语法。我的目标是创建一个没有参数并返回void指针的函数指针数组。有谁能帮忙吗?

6
如果您发布一些代码并尽可能准确地解释问题,即使该代码不起作用,通常会获得更好的回复。这表明您在努力解决问题。 - Eric J.
请查看此链接:http://c-faq.com/decl/spiral.anderson.html - Vikram
5个回答

19
  1. 首先,你应该了解cdecl

cdecl> declare a as array 10 of pointer to function(void) returning pointer to void
void *(*a[10])(void )
  • 你可以手动实现这个过程 - 从内部开始构建:

    a

    是一个数组:

    a[10]

    里面存放的是指针:

    *a[10]

    这些指针指向函数:

    (*a[10])

    这些函数不带参数:

    (*a[10])(void)

    返回值为 void *

    void *(*a[10])(void)

  • 如果你使用 typedef,会使你的生活更轻松:

    typedef void *(*func)(void);
    

    然后创建你的数组:

    func a[10];
    

  • 注意:开头的链接非常有帮助! - Ziezi

    7
    每当复杂句法变得太复杂时,通常使用typedef来澄清问题。 例如:
    typedef void *(* funcPtr)(void);
    
    funcPtr array[100];
    

    如果没有typedef,我想代码会像这样:

    void *(* array[100])(void);
    

    5

    从数组名开始,逐步向外推导,记住[]()*优先级高(*a[]是指针数组,(*a)[]是数组指针,*f()是返回指针的函数,(*f)()是指向函数的指针):

            farr               -- farr
            farr[N]            -- is an N-element array
           *farr[N]            -- of pointers
          (*farr[N])(    )     -- to functions
          (*farr[N])(void)     --   taking no arguments
         *(*farr[N])(void)     --   and returning pointers
    void *(*farr[N])(void);    --   to void
    

    2

    使用 typedef

    typedef void* func(void);
    func *arr[37];
    

    0

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接