如果我将void *vptr
传递给以other_type *ptr
为参数的函数,vptr
会自动转换为other_type *
吗?这是代码,
typedef struct A {
//...
}A;
void bar(A *a)
{
//do something with a
}
int main()
{
A a = {..};
void *vp = &a;
bar(vp); //will vp be converted to A*?
}
我的代码是安全的还是正确的?
是的,void*
可以隐式转换为任何指针类型,任何指针类型都可以隐式转化为void*
。例如,这就是为什么不需要(也不应该)强制转换malloc
的返回值。
您的代码将正常工作。您可以将void*传递给需要结构a*的对象。在这方面,C只是弱类型的。