我很难理解函数指针的语法。我的目标是创建一个没有参数并返回void指针的函数指针数组。有谁能帮忙吗?
首先,你应该了解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];
typedef void *(* funcPtr)(void);
funcPtr array[100];
如果没有typedef,我想代码会像这样:
void *(* array[100])(void);
从数组名开始,逐步向外推导,记住[]
和()
比*
优先级高(*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
使用 typedef
typedef void* func(void);
func *arr[37];