什么是投指针

What is casting a pointer

本文关键字:指针 什么      更新时间:2023-10-16

我知道可以将int等类型强制转换为float,但什么是强制转换指针?

例如,我一直在查看Direct X API 的一些代码

reinterpret_cast<void**>(&mDirect3DDevice)

我不明白这里发生了什么。我认为选角是指你基本上把一种类型转换为另一种类型。

Casting实际上是将一种类型转换为另一种类型,或者更准确地说,是将一个类型的值转化为另一个类型。

在您的情况下,您正在将指向mDirect3DDevice的指针转换为指向void *的指针。

不过,一般来说,重新解释强制转换指针并不是很有用,因为您不能保证结果是有用的。唯一合理的重新解释演员阵容是:

  • 往返于void *,这是双向值保留(也就是说,任何对象指针都可以转换为指向void的指针,然后返回原始值),但这些都应该用static_cast s来完成
  • 往返于char *,这对于访问字节表示下面的对象(例如用于序列化)是有用的
  • 在指向布局兼容的标准布局类型(例如,联合的公共初始序列或整型的带符号版本)的指针之间

通过重新解释指针和取消引用结果,您可以假装一种类型的值实际上是另一种类型值—只有在非常狭窄的情况下,这才有意义。

我相信任何变量都可以转换为指针,因为指针指向该变量在内存中的位置。因此在这种情况下,mDirect3DDevice之前的&返回变量mDirect3DDevice的存储位置,而不是mDirect3DDevice的内容。

我希望这能有所帮助!

相关文章: