`void *`到其他指针

时间:2012-02-25 03:08:21

标签: c void-pointers

如果我将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*?
}

我的代码安全或正确吗?

2 个答案:

答案 0 :(得分:5)

是的,void*可以隐式转换为任何指针类型,任何指针类型都可以隐式转换为void*。这就是为什么你不需要(也不应该)转换malloc的返回值的原因。

答案 1 :(得分:3)

您的代码将有效。你可以将void *传递给期望结构A *的东西。在这方面,C只是弱类型。