我想调用一个foo(void * data)类型的函数,它的输入参数是一个结构变量。
我听说当输入格式是void类型时,它接受每种类型的输入变量类型。不过,我收到一条错误消息。

struct info{
    int element;
};

struct info inserter_info;
inserter_info.element = 0;

inserter(inserter_info);

其中inserter()被原型化为void * inserter(void * data)
我试过选角,但也收到了错误信息。

最佳答案

我听说当输入格式是void类型时,它接受每种类型的输入变量类型
完全错了!!!!void没有任何意义。它什么也不接受。
但是,void *被认为是一个泛型指针。引用C11标准文件,第6.3.2.3章,指针,段落1,
指向void的指针可以转换为任何对象类型的指针,也可以从任何对象类型的指针转换为任何对象类型的指针。指向任何对象类型的指针可以转换为指向void的指针并再次转换;结果应与原始指针相等。
使用此属性,函数参数多次被写为void *以便函数可以接受不同类型的指针,然后,在函数体内部,基于某些其他参数,在使用之前,将接收到的指针转换(casted)回实际的指针类型。
如果检查正确,函数的参数不是void,而是void *
你需要像这样调用你的函数

inserter(&inserter_info);

你的编译器应该警告你不匹配。

07-24 09:44
查看更多