【发布时间】:2012-07-19 14:17:55
【问题描述】:
我想要一个可以接受各种类型参数的函数指针。我该怎么做?
以下示例(第 1 行),我希望 void (*fp)(int) 也能够采用 void (*fp)(char*)。以下代码无法正确编译,因为我在预期 int 的地方传递了 char*,因此编译以下代码会给您警告(并且无法正常工作)。
void callIt(void (*fp)(int))
{
(*fp)(5);
}
void intPrint(int x)
{
printf("%d\n", x);
}
void stringPrint(char *s)
{
printf("%s\n", s);
}
int main()
{
void (*fp1)(int) = intPrint;
callIt(fp1);
void (*fp2)(char*) = stringPrint;
callIt(fp2);
return 0;
}
注意:我知道尝试将整数 5 作为 char* 参数传递是愚蠢的,但这不是这个问题的关注点。如果需要,可以将 char* 替换为 float。
【问题讨论】:
-
你不会在 C 中得到你想要的。你可以在 C++ 中使用模板来做到这一点。在 C 语言中,您需要针对不同类型使用不同的 callIt 函数。
-
int(5)如何是floatPrint(float f)的有效参数?您需要进行强制转换,但如果您通过强制转换删除了函数指针类型,这将不起作用。
标签: c function-pointers