指针数组(c)中不兼容类型的赋值

指针数组(c)中不兼容类型的赋值,c,arrays,void-pointers,C,Arrays,Void Pointers,我使用的是指针数组(函数的地址)。 我正在解析多种类型的数据(char*,int,等等)。 为了避免任何类型错误,我使用了倍数void*。 这就是为什么我感到困惑的原因,因为编译器说它们是不兼容的类型(因此,当我编译它时,它工作) 数组原型是:void*(*arg_handler[4])(void*arg) 我使用一个名为list的函数来保存不同的地址,并返回带有特定参数的函数地址: void *list(int x, void *arg) { arg_handler[0] = &am

我使用的是指针数组(函数的地址)。 我正在解析多种类型的数据(
char*
int
,等等)。 为了避免任何类型错误,我使用了倍数
void*
。 这就是为什么我感到困惑的原因,因为编译器说它们是不兼容的类型(因此,当我编译它时,它工作)

数组原型是:
void*(*arg_handler[4])(void*arg)

我使用一个名为list的函数来保存不同的地址,并返回带有特定参数的函数地址:

void    *list(int x, void *arg)
{
  arg_handler[0] = &my_putstr;
  arg_handler[1] = &my_put_printable;
  arg_handler[2] = &my_put_nbr;
  arg_handler[3] = &my_put_nbr;
  return (arg_handler[x](arg));
}
我通过以下方式从主函数调用列表:

list(f_type(s[x + 1]), va_arg(args, void *));
但我不明白我为什么会犯这个错误:

 warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
用于:


有什么想法吗?

正如alk所说,出现警告是因为4个函数没有输入为
void*
。因此,我将函数转换为
void*
,而不是为每种类型创建一个数组,如下所示:

arg_handler[0] = (void *)my_putstr;
arg_handler[1] = (void *)my_put_printable;
arg_handler[2] = (void *)my_put_nbr;
arg_handler[3] = (void *)my_put_nbr;

这是完全的警告吗?我希望它更具体一些。你也会得到关于哪一行代码的警告?是的,这是完整的警告。它在“for”部分(就在“any idea”之前)指定了什么是
f_type
,请?使用铸造锤几乎总是会使编译器静音,它几乎从来没有在任何时候阻止代码运行到未定义的行为…f_类型控制数据的解析。因此数据将始终适合我在arg handler中调用的函数类型
arg_handler[0] = (void *)my_putstr;
arg_handler[1] = (void *)my_put_printable;
arg_handler[2] = (void *)my_put_nbr;
arg_handler[3] = (void *)my_put_nbr;