功能指针

时间:2010-12-23 08:59:59

标签: c

这两个陈述之间有什么区别:

void (*p) (void *a[],int n)

void *(*p[]) (void *a, int n)

3 个答案:

答案 0 :(得分:8)

$ cdecl
void (*p) (void *a[],int n);
declare p as pointer to function that expects (a as array of pointer to void, n as int) returning void;
void *(*p[]) (void *a, int n);
declare p as array of pointer to function that expects (a as pointer to void, n as int) returning pointer to void;

答案 1 :(得分:2)

在第71页的Expert_C_Programming_Deep_C_Secrets_by_Peter_van_der_Linden中有一种理解这种类型的复杂声明的美妙方式。

据他说:

c中的声明是boustrophedically,即从右到左,从左到右。 看看这个快照

How-to-read-c-declaration

如果您知道如何下载电子书,可以在谷歌上使用。

答案 2 :(得分:0)

void(* p)(void * a [],int n) p是变量名。从上面的行中删除p void(*)(void * a [],int n)。所以p就属于这种类型。这是一个函数的指针。所以p是指向具有该签名的函数的指针。 所以p是一个指向函数的指针,该函数返回void并将'void pointers'和int数组作为参数。

void *(* p [])(void * a,int n) []的优先级高于*。所以p是一个数组。删除p []以上。 所以p是一个void(*)(void * a [],int n)

的数组

所以这里p是一个函数指针数组,返回void并将'void pointers'和int数组作为参数。