我对以下代码有疑问:
//Definition of base used in ptr
void *base;
int query(Win *ptr, void *baseptr)
{
*(void**) baseptr = ptr->base;
...
}
我可以简单地将语句更改为以下内容吗?
baseptr = ptr->base;
为什么将baseptr
投射到void **
?
答案 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)。