取消引用指针数组的void指针

时间:2012-03-07 20:18:34

标签: c++ pointers void-pointers

我正在使用在学校给我的线程库,并且无法理解如何将指针数组的引用传递给方法,或者说,我在解除引用和使用指针数组时遇到了问题。

我(相信我)理解的情况是:

int main(void)
{
    Foo* bar = new Foo();

    // Passing instance of Foo pointer by reference 
    CThread *myThread = new CThread(MyFunction, ACTIVE, &bar);

    return 0;
}

UINT __stdcall MyFunction(void *arg)
{
    Foo* bar = *(Foo*)(arg); 

    return 0;
}

我正在创建一个指向Foo对象的指针,并通过引用传递它来运行MyFunction,该线程接受一个void指针作为其参数。然后,MyFunction将“arg”转换为Foo指针并取消引用它以获取原始对象。

当我想传递一个Foo指针数组而不只是一个时,我的问题出现了:

int main(void)
{
    Foo* barGroup[3] = 
    {
        new Foo(),
        new Foo(),
        new Foo()
    };

    // Passing instance of Foo pointer by reference 
    CThread *myThread = new CThread(MyFunction, ACTIVE, &barGroup);

    return 0;
}

UINT __stdcall MyFunction(void *arg)
{
    // This is wrong; how do I do this??
    Foo* barGroup[3] = *(Foo[]*)(arg); 

    return 0;
}

1 个答案:

答案 0 :(得分:4)

MyFunction(&barGroup);替换为MyFunction(barGroup);(从而将指针传递给第一个元素而不是指向整个数组的指针)并使用嵌套指针:

Foo** barGroup = (Foo**)(arg); 

然后,您只需使用barGroup[0]barGroup[1]barGroup[2]