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

标签 c arrays void-pointers

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

数组原型(prototype)为: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]

对于:

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

有什么想法吗?

最佳答案

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

关于c - 指针数组中不兼容类型的赋值 (c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564547/

相关文章:

c - C中的泛型编程

c - 内存文件的文件路径

c - 如何将指向结构的指针设置为 NULL

python - 求多个根的二分法

javascript - 如何使用 Jquery onclick 获取数组的下一个元素

python - 通过使用 NumPy 对 2 个数组元素数组进行求和来形成矩阵

c++ - 函数参数中的 "type name[size]"是什么意思?

C++ P线程。 pthread_create 的参数

c - 机器的最低对齐要求

c++ - 指向类对象的空指针: Initialization inside a function