存储地址信息

时间:2014-11-14 15:56:27

标签: c

我对以下代码有疑问:

//Definition of base used in ptr
void *base; 

int query(Win *ptr, void *baseptr)
{
    *(void**) baseptr = ptr->base;
    ...
}

我可以简单地将语句更改为以下内容吗?

baseptr = ptr->base;

为什么将baseptr投射到void **

2 个答案:

答案 0 :(得分:3)

看起来baseptr用作输出参数。 query()的来电者应该是这样的:

void *base = NULL;
Win *win = something;
int result = query(win, &base);

然后,可以为呼叫者功能中的base分配接收的值。

如果您只是写baseptr = ptr->base;,那么 base内的query() 副本正在更新。在query()返回后,调用者中的指针根本不会更新。

答案 1 :(得分:0)

你似乎在演员之前忽略了第一个*。它取消引用指针baseptr。这意味着,ptr-> base的值存储在baseptr POINTS TO的地址中,而不是存储在baseptr ITSELF中。转换是因为它告诉编译器baseptr现在是指向另一个void指针的指针(即void指针ptr-> base)。