将具有不同指针类型的函数指针转换为参数

标签 c function-pointers

我认为以下代码描述了我正在尝试做的事情。具体来说,我希望将函数指针转换为通用函数类型,签名的唯一区别是不同的指针类型。

现在,我知道函数指针需要兼容,如this question 中所述。 ,但我不确定具有不同指针类型的参数是否满足兼容性要求。

代码编译并运行,但正如预期的那样,给出了关于来自不兼容指针类型的赋值的警告。有什么方法可以满足编译器并实现我所追求的目标吗?

#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;
}

最佳答案

最简洁的方法是恕我直言,在函数内部执行强制转换。这将强制所有函数签名相同,并将强制转换排除在调用者的代码之外。 (例如,这就是 qsort() 想要的方式)

int double_function(void *p, unsigned size)
{
    double *array = p    
    unsigned uu;

    for(uu=0; uu < size; uu++){
        printf("%f\n", array[uu]);
    }
return 42;
}

关于将具有不同指针类型的函数指针转换为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9045544/

相关文章:

c++ - 保留函数指针模板参数

c++ - 在不产生动态查找成本的情况下拥有通用代码接口(interface)的好方法是什么?

c++ - 指向 const 的指针与通常的指针(对于函数)

c++ - 请解释 "typedef"的语法规则和范围

c - 如何使用短整型的左字节和右字节?

c - 使用 ncurses 接收异步用户和外部输入

c - 在 PulseAudio 中获取当前事件输出的 Monitor sink

c++ - c++ 中的 "function Pointer"与 c# 中的 "delegate"的行为相似吗?

javascript - 计算 4x4 矩阵的行列式 - (RayTracer 挑战) - Javascript

c - 服务器不会进入 if 语句,它会构造。用 C 语言进行套接字编程