将函数数组作为参数传递给函数
问题描述:
我的C有点生锈。假设我有以下几种:将函数数组作为参数传递给函数
char* (*funcs[n])(void);
我将如何定义或声明另一个函数来将此数组作为参数。我试过
void func(char* (*p)(void));
但gcc抱怨。
答
参数具有相同的类型数组,但你可以省略尺寸:
void print(char* (*p[])(void)) { ... }
您也可以使用该数组衰变为指针的事实,并声明:
void print(char* (**p)(void)) { ... }
这些功能签名是等效的。在功能中,使用以下任一方式调用功能:
char *a = (*p)();
char *b = (p[0])();
这些调用也是等效的。
但是,作为user694733在评论中指出,一切都是由制作typedef
一定签名的功能,更容易说:
typedef char *(*Charpfunc)(void);
然后,你可以使用熟悉的语法为您的阵列和函数参数:
char *hello(void) { return "hello"; }
char *howdy(void) { return "howdy"; }
char *goodbye(void) { return "goodbye"; }
typedef char *(*Charpfunc)(void);
void print(Charpfunc *p)
{
while (*p) {
puts((*p)());
p++;
}
}
int main()
{
Charpfunc funcs[] = {
hello, howdy, goodbye, NULL
};
print(funcs);
return 0;
}
+1但我也建议为函数指针typedef char *(* T)(void)'进行类型定义,因此它可以像普通数组写入:'T array [ ]'。 – user694733 2015-01-21 12:05:10
@ user694733:好的,谢谢。我补充说。 – 2015-01-21 12:13:43