我對下面的代碼問題:店面地址信息
//Definition of base used in ptr
void *base;
int query(Win *ptr, void *baseptr)
{
*(void**) baseptr = ptr->base;
...
}
我可以簡單地改變語句下面?
baseptr = ptr->base;
爲什麼它會投baseptr
到void **
?
我對下面的代碼問題:店面地址信息
//Definition of base used in ptr
void *base;
int query(Win *ptr, void *baseptr)
{
*(void**) baseptr = ptr->base;
...
}
我可以簡單地改變語句下面?
baseptr = ptr->base;
爲什麼它會投baseptr
到void **
?
看起來baseptr
用作輸出參數。的query()
則調用者應該是這樣的:
void *base = NULL;
Win *win = something;
int result = query(win, &base);
然後,base
在調用函數可以被分配接收到的值。
如果你只寫baseptr = ptr->base;
,那麼它是複製的base
內query()
被更新。 query()
返回後,調用者中的指針根本不會更新。
你似乎在演員之前忽視了第一個*。它取消了指針baseptr的引用。這意味着,ptr-> base的值存儲在baseptr指向的地址,而不是baseptr的ITSELF。轉換髮生是因爲它告訴編譯器baseptr現在是指向另一個void指針的指針(即void指針ptr-> base)。
可能有一些接口需要'query()'來實現。我們可以獲得關於如何使用query()的信息嗎? – 2014-11-14 15:59:18
不,你不能,因爲'*(void **)baseptr'與'baseptr'不是一回事。前者取消引用'baseptr'並將值存儲在它指向的內存中。後者不解除引用,而是將值(它恰好是一個指針)存儲在'baseptr'本身中。 – 2014-11-14 16:01:29
@BillLynch timrau給出的例子就是它在代碼中的使用方式。感謝您的幫助。 – Lemon 2014-11-14 16:11:41