我想要一個函數指針,它可以採用各種類型的參數。我怎麼做?帶有未確定參數的函數指針
下面的例子(第1行),我想void (*fp)(int)
也能夠採取void (*fp)(char*)
以及。下面的代碼沒有正確編譯,因爲我傳遞了char *,其中int是預期的,所以編譯下面的代碼會給你警告(並且不能正常工作)。
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 *參數是愚蠢的,但是這不是對這個問題的關注。如果你願意,你可以用float替換char *。
你不會準確地得到你想要的C.你可以在C++中使用模板。在C中,您需要針對不同的類型使用不同的callIt函數。 – 2012-07-19 14:24:33
無論如何'int(5)'是'floatPrint(float f)'的一個有效參數?您需要進行強制轉換,但如果您通過強制轉換擦除了函數指針類型,那麼這將不起作用。 – MSalters 2012-07-19 16:11:10