2010-04-05 50 views

回答

7

int *(*pfp)();

创建一个指向一个返回int *的功能。函数指针名称是pfp

下面是一个例子:

int* myFunc(void) 
{ 
    return NULL; 
} 


int main(int argc, char**argv) 
{ 
    int *(*pfp) (void); 
    pfp = myFunc; 
    return 0; 
} 

注意:由于函数指针的参数不(无效),你给了,这意味着,参数列表中没有C.指定在C++中,它意味着这是一个没有参数的函数。

+0

而函数的参数也没有指定。 (如果它没有参数,它将是'int *(* pfp)(void);'而不是)。 – 2010-04-05 03:04:26

0

pfp是一个函数指针,它不接受参数(或C中的不确定参数)并返回指向int的指针。

使用“顺时针螺旋”的规则是破译复杂的C声明的有效方法(至少我认为是有效的):

4

Brian的解释“是什么”,但如果你好奇的原因,这里的丹尼斯·里奇的The Development of the C Language的摘录:

是最清楚的,从它的前辈区别C中的第二个创新是这个更全面类型结构,特别是在声明语法中的表达。 NB提供了基本类型int和char,以及它们的数组,以及指向它们的指针,但没有其他组合方式。被要求概括:给出的任何类型的对象,它应该是可以描述一个新的对象,其收集几个到一个数组,从函数产生,或者是指向它的指针。

对于这样的构成的类型的每个目的,已经提底层对象的方式:索引数组,调用函数,使用间接运算符上的指针。类比推理导致名称的声明语法镜像名称通常出现的表达式语法的名称。因此,

    int i, *pi, **ppi;

声明的整数,一个指针到一个整数,指针的指针的整数。这些声明的语法反映了当在表达式中使用时,i,* pi和** ppi都会产生int类型。类似地,

    int f(), *f(), (*f)();

声明函数返回一个整数,函数返回一个指针的整数,一个指针指向一个函数返回的整数;

    int *api[10], (*pai)[10];

声明指针数组为整数,和一个指向整数数组。在所有这些情况下,变量的声明类似于它在声明头部命名的表达式中的用法。

欲了解更多信息,请阅读Steve Friedl的“Reading C type declarations”或Eric Giguere的“Reading C Declarations: A Guide for the Mystified”。