C - 函数返回指向函数的指针

时间:2017-04-27 22:05:27

标签: c function pointers memory memory-management

函数返回指向另一个函数的指针(它可能会返回一个指向某个thrid函数的指针等)的C语法是什么?我知道我们可以将一个函数定义为另一个函数中的局部变量(但我们需要知道地址或它是无用的):

int*(*a)(int) = (void*)0;

这是局部变量a,它表示一个函数,其int作为参数并返回指向int的指针,而函数的地址为0。我怎么能有一个函数返回指向int的指针,而不是指针指向需要char作为参数并返回指向int的函数的指针?这就是我尝试过的:

int*(*)(char)(*a)(int) = (void*)0;

但是,这是一个语法错误。有没有办法做到这一点,或者可能,唯一的方法是返回void*然后重新投射它才能发挥作用?

修改

我不只是寻找有效的解决方案。我知道可以使用typedef或仅通过返回通用指针然后转换为另一个函数来完成。但是,我正在为C写一个代码荧光笔,我想要涵盖ISO C定义的所有情况,所以我想知道ISO C是否允许双返回函数,如果是的话,什么是正确的语法,如果没有,可以吗在文档的某个地方找到?

1 个答案:

答案 0 :(得分:3)

您可以使用typedef来简化此操作(并确保您可以在一周后真正理解代码):

typedef int*(*FuncA)(int);
typedef FuncA(*FuncB)();

FuncB a = (void*)0;

显然使用比我在这里做的更具描述性的名字。