2014-03-27 102 views
1

通過項目的代碼看,我發現這一點:多指針的指針

font.Draw(x, y + 15 * 1, fontColor, "agPtr: %p <= %p", *(void**)agLocked.m_ptr, (void**)agLocked.m_ptr); 

如何比(void**)agLocked.m_ptr不同*(void**)agLocked.m_ptr

而且這樣的:

unsigned long shift = *(unsigned long*)all.m_ptr; 
    shift = *(unsigned long*)(shift + 0x30); 
    shift = *(unsigned long*)(shift + 0x28); 
    shift = *(unsigned long*)(shift + 0x178); 

我已經看過指針運算以及所有和它沒有任何意義,我。有人能指出(赫赫)我朝着正確的方向嗎?是第一個訪問三個指針的*(void**)?爲什麼不使用(void***)?雖然我對C++很感興趣,但我想更好地理解上述內容,以便我可以爲項目做出貢獻。

+2

'*(void **)'的結果是'(void *)'。它將指針推向一級。 '*(unsigned long *)'的結果是'unsigned long'。 –

+0

'type * something'聲明一個指向'type'的指針,'* something'聲明這個指針。 – Nick

+0

至於'unsigned long'的東西:指針算術在某種程度上取決於'all.m_ptr'的類型。代碼很可能會導致程序在很多平臺上崩潰。 –

回答

2
*(void**)agLocked.m_ptr 

該提領agLocked.m_ptr獲得void *和可能故障,如果是NULL或包含垃圾。

(void**)agLocked.m_ptr 

這只是蒙上agLocks.m_ptrvoid **