2013-03-26 96 views
3

在阅读this文章时,我遇到了以下函数指针声明。我没有使用这样的声明,但我解释它的方式是:当解除引用时,函数的返回值是一个接受2个整数并返回一个int的函数。返回函数指针的函数声明

int (*functionFactory(int n))(int, int) { 
printf("Got parameter %d", n); 
int (*functionPtr)(int,int) = &addInt; 
return functionPtr; 
} 

我很好奇,想知道这样的声明是否是专门针对这种情况还是有,我已经错过了一个通用的方法。

我的意思是,我们通常看到的声明像

<returnType> funcName(listOfArgs){} 

这其中出现了联赛。有人可以详细说明。

回答

4

我们通常看到的声明像<returnType> funcName(listOfArgs){}

是的,但在这种情况下,返回类型是起作用的指针,这是真正的可能途径之一是如何定义样的功能:

int (*functionFactory(int n))(int, int) { 
    ... 
} 

幸运的是,你可以使用typedef,使得它更简单的任何类型创建别名:

typedef int (*FncPtr)(int,int); 

FncPtr functionFactory(int n) { 
    printf("Got parameter %d", n); 
    FncPtr functionPtr = &addInt; 
    return functionPtr; 
} 

这是更容易阅读,也更容易理解。和函数原型的形式,就像你希望它看起来像:这是一个需要int 1个型参数,返回FncPtr :)

+1

Yay for'typedef'。 – 2013-03-26 18:04:04

2

要声明一个函数返回一个指向函数调用functionFactory功能,首先编写要返回的函数类型的声明。例如,接受2 int并返回int的函数的类型是:

int function(int, int) 

现在,使它指向一个功能通过插入*。由于优先级的方式获得(括号函数参数将更加紧密地绑定到比*确实标识符),我们必须插入括号太:

int (*function)(int, int) 

最后,与工厂的声明符更换标识功能。 (为此目的,声明符是函数标识符和参数列表。)在这种情况下,我们用factory(int)代替function。这给:

int (*factory(int))(int, int) 

声明一个函数,factory(int),返回的东西,适合那个地方xxxint (*xxx)(int, int)。适合该位置的是指向一个函数的指针,它取两个int并返回int