f(void *&)调用的C ++错误

时间:2012-05-11 13:07:06

标签: c++

请您解释以下代码中的错误:

void foo(void*& param)
{
    param = new char[10];
}

void main()
{
    int* p;
    foo(p);
}

error C2664: 'foo' : cannot convert parameter 1 from 'int *' to 'void *&'

如何调用任何指针类型的函数并更改函数内的指针(不是该地址的值,地址本身)。我不想使用模板或双指针。

2 个答案:

答案 0 :(得分:2)

如果要更新指针,最好将指针传递给指针

void foo(void** param)
{
    *param = new char[10];
}

void main()
{
    void* p;
    foo(&p);
    int* p2 = (int*)p;
}

答案 1 :(得分:2)

为什么不能将int*作为参数传递给f

问题是,如果允许这样做,你就会破坏类型系统。说实话,这正是你想要做的......如果你想打破类型系统,你需要通过演员表明地请求它。

您在评论中指出您不想使用强制转换,另一方面编译器不希望您破坏类型系统。在那场意志之战中,我认为你不会说服编纂者......这太顽固了。