什么是投射指针

What is casting a pointer

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

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

reinterpret_cast<void**>(&mDirect3DDevice)

我不明白这里发生了什么。我认为转换是当您基本上将一种类型转换为另一种类型时。

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

希望对您有所帮助!

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

在你的例子中,你正在将一个指针转换为任何 mDirect3DDevice 指向 void *.

的指针

不过,一般来说,重新解释转换指针不是很有用,因为您无法保证结果有用。唯一合理的重新解释转换是:

  • 往返于 void *,它们是往返保值的(也就是说,任何对象指针都可以转换为指向 void 的指针,然后返回,您将获得原始值), 但这些应该用 static_casts;
  • 往返于char *,这对于访问底层字节表示的对象很有用(例如用于序列化);
  • 在指向与布局兼容的标准布局类型(例如联合的通用初始序列或整数类型的签名版本)的指针之间。

重新解释指针 并取消引用结果 允许您假装一种类型的值实际上是另一种类型的值 - 这只在非常狭窄的集合中才有意义情况。