gpt4 book ai didi

c++ - 取消引用指向指针数组的 void 指针

转载 作者:行者123 更新时间:2023-11-27 23:25:47 25 4
gpt4 key购买 nike

我正在使用学校提供的线程库,但无法理解如何将指针数组的引用传递给方法,或者更确切地说,我在取消引用和使用指针数组时遇到了麻烦。

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

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]

关于c++ - 取消引用指向指针数组的 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com