什么是投射指针

时间:2015-03-20 00:59:42

标签: c++ pointers casting

我知道你可以把一个像int这样的类型转换为float但是什么是转换指针?

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

reinterpret_cast<void**>(&mDirect3DDevice)

我不明白这里发生了什么。我认为铸造是在你基本上将一种类型修改为另一种类型时。

2 个答案:

答案 0 :(得分:4)

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

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

但是,通常情况下,重新解释指针并不是很有用,因为您没有任何保证结果是有用的。唯一明智的重新诠释是:

  • 往返于void *,它们是往返值保留(也就是说,任何对象指针都可以转换为指向void并返回的指针,然后返回原始值),但这些应该用static_cast s;
  • 完成
  • 来往于char *,这对于访问基于字节表示的对象非常有用(例如,用于序列化);
  • 指向布局兼容,标准布局类型的指针之间(例如,工会的常见初始序列或整数类型的签名版本)。

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

答案 1 :(得分:0)

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

我希望这有帮助!