【发布时间】:2012-03-25 09:23:36
【问题描述】:
我正在使用学校给我的线程库,并且无法理解如何将指针数组的引用传递给方法,或者更确切地说,我在取消引用和使用指针数组时遇到了麻烦。
我(相信我)理解的情况是这样的:
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;
}
【问题讨论】:
-
你为什么要传递
addressof一个指针? -
你不是通过引用传递的。您正在传递一个指向对象指针的指针。还有,你为什么用
void*? -
*(Foo*(*)[3])但是为什么呢? -
像这样使用 void*s,而且几乎在所有情况下,都是非常糟糕的做法。
-
你为什么用
void*而不是真正的类型?
标签: c++ pointers void-pointers