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

时间:2016-11-12 15:44:13

标签: c arrays void-pointers

我使用指针数组(这是函数的地址)。 我正在为他们解析多种类型的数据(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]

for:

arg_handler[0] = &my_putstr;
arg_handler[1] = &my_put_printable;
arg_handler[2] = &my_put_nbr;
arg_handler[3] = &my_put_nbr;

任何想法?

1 个答案:

答案 0 :(得分:-1)

正如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;