我正在使用一个指针数组(它们是函数的地址)。
我正在向它们解析多种类型的数据(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/