如果我将void *vptr
传递给以other_type *ptr
作为其arg的函数,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*?
}
我的代码安全或正确吗?
答案 0 :(得分:5)
是的,void*
可以隐式转换为任何指针类型,任何指针类型都可以隐式转换为void*
。这就是为什么你不需要(也不应该)转换malloc
的返回值的原因。
答案 1 :(得分:3)
您的代码将有效。你可以将void *传递给期望结构A *的东西。在这方面,C只是弱类型。