取消引用指向指针数组的空指针

De-referencing void pointer to a pointer array

本文关键字:数组 空指针 指针 引用 取消      更新时间:2023-10-16

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

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

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;
}

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

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

然后您可以简单地使用barGroup[0]barGroup[1]barGroup[2]