我正在使用在学校给我的线程库,并且无法理解如何将指针数组的引用传递给方法,或者说,我在解除引用和使用指针数组时遇到了问题。
我(相信我)理解的情况是:
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;
}
答案 0 :(得分:4)
将MyFunction(&barGroup);
替换为MyFunction(barGroup);
(从而将指针传递给第一个元素而不是指向整个数组的指针)并使用嵌套指针:
Foo** barGroup = (Foo**)(arg);
然后,您只需使用barGroup[0]
,barGroup[1]
和barGroup[2]
。