我正在阅读某人的(公共)源代码,但碰到这一行,也不知道它的作用。我已经尝试分解它,但是尽管我尝试了什么,但它总是最终使我感到困惑。

uintptr_t* pInterfaceVTable = (uintptr_t*)*(uintptr_t*)pd3dDevice;


pd3dDeviceLPDIRECT3DDEVICE9,这是IDirect3DDevice9*IDirect3DDevice9是一个继承自IUnknown的类,并且都实现了一堆虚函数。

有人能帮我解决这段代码的行吗?

非常感谢您的宝贵时间!

最佳答案

uintptr_t是可以存储指针的整数类型。

作者假设(知道吗?)IDirect3DDevice9中的第一个条目是一个指针,因此他将IDirect3DDevice9强制转换为(uintptr_t *)并取消引用它以访问该指针。然后,他将该uintptr_t再次强制转换为一个指针(指向uintptr_t),以将其分配给pInterfaceVTable。
如评论和AndyT所述,使用的编译器将存储指向VTable的指针,但C ++不能保证。

关于c++ - C风格的类型转换困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7496516/

10-09 01:07