函数返回指向另一个函数的指针(它可能会返回一个指向某个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是否允许双返回函数,如果是的话,什么是正确的语法,如果没有,可以吗在文档的某个地方找到?
答案 0 :(得分:3)
您可以使用typedef来简化此操作(并确保您可以在一周后真正理解代码):
typedef int*(*FuncA)(int);
typedef FuncA(*FuncB)();
FuncB a = (void*)0;
显然使用比我在这里做的更具描述性的名字。