我想调用一个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);
你的编译器应该警告你不匹配。