c++ - 指向指针的多个指针

标签 c++ pointers

查看项目代码我发现了这个:

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/

相关文章:

c++ - vector 的 vector ,保留

c++ - 使用 arm-none-eabi 进行 Clang 交叉编译

java - 编程中实例的含义是什么?

c++ - 具有任何返回类型和任何参数的 Derived Functor

c++ - int* 到常量数组

c++ - 空指针代替 int 类型的指针

C++11 `using` 关键字 : specialize template alias of template parameter

C++ 清除指向动态分配对象的指针 vector 会导致异常?

c++ - 引用双指针,值是多少?

c - 使用指针时的意外行为和编译器错误