函数声明返回函数指针

Cur*_*Sid 4 c syntax function-pointers declaration function

在阅读文章中,我碰到的函数指针的以下声明.我没有使用过这样的声明,但我解释它的方式是:当取消引用时,functionFactory的返回值是一个接受2个int的函数并返回一个int.

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

我很想知道这样的声明是针对这种情况还是有一种我错过的通用方法.

我的意思是我们通常会看到类似的声明

<returnType> funcName(listOfArgs){}
Run Code Online (Sandbox Code Playgroud)

这个出现在联盟之外.请有人详细说明.

Lih*_*ihO 6

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

是的,但在这种情况下,返回类型是指向函数的指针,这实际上是定义这种函数的可能方法之一:

int (*functionFactory(int n))(int, int) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

这更容易阅读,也更容易理解.函数原型的形式就像你期望的那样:它是一个被调用的函数functionFactory,它接受1个类型的参数int并返回FncPtr:)