C中的函数指针数组

yas*_*sar 8 c arrays pointers function

我很难理解函数指针的语法.我要做的是,有一个函数指针数组,不带参数,并返回一个void指针.任何人都可以帮忙吗?

Car*_*rum 19

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

    cdecl> declare a as array 10 of pointer to function(void) returning pointer to void
    void *(*a[10])(void )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你可以手工完成 - 只需从内部构建它:

    a

    是一个数组:

    a[10]

    指针:

    *a[10]

    功能:

    (*a[10])

    不参数:

    (*a[10])(void)

    回归void *:

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

  3. 如果你typedef用来让你的生活更轻松,那就更好了:

    typedef void *(*func)(void);
    
    Run Code Online (Sandbox Code Playgroud)

    然后制作你的数组:

    func a[10];
    
    Run Code Online (Sandbox Code Playgroud)


Tom*_*mmy 7

每当复合语法过于复杂时,typedef通常都会清除.

例如

typedef void *(* funcPtr)(void);

funcPtr array[100];
Run Code Online (Sandbox Code Playgroud)

没有typedef,我猜想会是这样的:

void *(* array[100])(void);
Run Code Online (Sandbox Code Playgroud)


Joh*_*ode 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
Run Code Online (Sandbox Code Playgroud)