我认为以下代码描述了我想要做的事情。具体来说,我希望将函数指针转换为通用函数类型,签名的唯一区别是指针类型不同。
现在,我知道函数指针需要兼容的正如所讨论的这个问题 https://stackoverflow.com/questions/559581/casting-a-function-pointer-to-another-type,但我不确定具有不同指针类型的参数是否满足兼容性要求。
该代码编译并运行,但正如预期的那样,给出了有关来自不兼容指针类型的赋值的警告。有什么方法可以满足编译器并实现我所追求的目标吗?
#include <stdio.h>
int float_function(float *array, int length)
{
int i;
for(i=0; i<length; i++){
printf("%f\n", array[i]);
}
}
int double_function(double *array, int length)
{
int i;
for(i=0; i<length; i++){
printf("%f\n", array[i]);
}
}
int main()
{
float a[5] = {0.0, 1.0, 2.0, 3.0, 4.0};
double b[5] = {0.0, 1.0, 2.0, 3.0, 4.0};
int (*generic_function)(void*, int) = NULL;
generic_function = &float_function;
generic_function(a, 5);
generic_function = &double_function;
generic_function(b, 5);
return 0;
}