查看项目代码我发现了这个:
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++ 很满意,但我想更好地理解上述内容,以便我可以为该项目做出贡献。
最佳答案
*(void**)agLocked.m_ptr
这取消引用 agLocked.m_ptr
以获得 void *
,如果它是 NULL
或包含垃圾,则可能会出错。
(void**)agLocked.m_ptr
这只是将 agLocks.m_ptr
转换为 void **
。
关于c++ - 指向指针的多个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22694930/