什么是投指针
What is casting a pointer
我知道可以将int等类型强制转换为float,但什么是强制转换指针?
例如,我一直在查看Direct X API 的一些代码
reinterpret_cast<void**>(&mDirect3DDevice)
我不明白这里发生了什么。我认为选角是指你基本上把一种类型转换为另一种类型。
Casting实际上是将一种类型转换为另一种类型,或者更准确地说,是将一个类型的值转化为另一个类型。
在您的情况下,您正在将指向mDirect3DDevice
的指针转换为指向void *
的指针。
不过,一般来说,重新解释强制转换指针并不是很有用,因为您不能保证结果是有用的。唯一合理的重新解释演员阵容是:
- 往返于
void *
,这是双向值保留(也就是说,任何对象指针都可以转换为指向void
的指针,然后返回原始值),但这些都应该用static_cast
s来完成 - 往返于
char *
,这对于访问字节表示下面的对象(例如用于序列化)是有用的 - 在指向布局兼容的标准布局类型(例如,联合的公共初始序列或整型的带符号版本)的指针之间
通过重新解释指针和取消引用结果,您可以假装一种类型的值实际上是另一种类型值—只有在非常狭窄的情况下,这才有意义。
我相信任何变量都可以转换为指针,因为指针指向该变量在内存中的位置。因此在这种情况下,mDirect3DDevice
之前的&
返回变量mDirect3DDevice
的存储位置,而不是mDirect3DDevice
的内容。
我希望这能有所帮助!
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 将指针分配给另一个指针时会发生什么情况?
- 当该数组的索引中没有元素时,指针指向什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 以下与指针相关的代码的输出是什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- C++中的指针.什么类型的对象