0

我创建了一个 void** p2 变量,例如

int x = 10;
void* p = &x;
void** p2 = &p;

这是在函数中创建的。我怎样才能使用参数或返回值,以 p2 和 * p2 都保持其精确值的方式传递这个 p2。我没有成功找到任何解决方案。请给我一个简短的例子,任何事情都可以。

也许一些细节会有所帮助:

class ShmItem
{
public:
    void* start;
    void** vtable;
};

这个类是全局的,它是全局向量的一部分。现在在我的职能中。

item.vtable = &item.start;
shm->address = item.vtable;

其中 item start 保存 mmap 的返回值。

shm 是一个参数对象,其中地址的类型为 void**。

现在,当我返回调用者时,item.start更改的值(在 中shm->address)...

对不起,我发现了这个与指针无关的错误。我可以删除这个线程吗?因为这个问题已经没有意义了。(虽然 Carlos 在函数调用之间传递双指针的方式是一个好主意,对我有帮助,所以我将其标记为已回答)。

4

2 回答 2

0

您不能获取局部变量的地址并以任何有意义的方式从函数中返回它,因为在函数返回时局部变量将超出范围。

在以下代码中,xp都是函数体的本地代码:

void foo()
{
    int x = 10;
    void * p = &x;
}

您可以传递的唯一明智的指针是指向函数返回时仍然存在的对象的指针,即全局对象或动态分配的对象,或者首先已经传递函数的对象(例如通过地址C,或通过 C++ 中的引用)。

于 2012-10-30T18:18:13.560 回答
0

我假设您使用的是 C 对吗?所以,我认为你需要做两件事。首先,在函数外部声明双指针变量,使其在函数返回后处于作用域内。其次,声明您的函数,使其接收并返回一个 void ** 参数,该参数将保存您想要的值,如下所示:

void **myfunc (void **p2) {
    int x = 10;
    void* p = &x;
    p2 = &p;  // notice var declaration is gone
    ...
    return p2;
}
void ** p2;
p2 = myfunc(p2);

您还可以声明 myfunc 以返回 void 并使用 p2 调用 myfunc 而无需赋值构造。

于 2012-10-30T18:19:03.357 回答