什么是投射指针
What is casting a pointer
我知道您可以将 int 等类型转换为 float,但什么是转换指针?
例如,我一直在查看 Direct X 的一些代码 API
reinterpret_cast<void**>(&mDirect3DDevice)
我不明白这里发生了什么。我认为转换是当您基本上将一种类型转换为另一种类型时。
我相信任何变量都可以转换为指针,因为指针指向该变量在内存中的位置。所以在这种情况下 mDirect3DDevice
之前的 &
returns 变量的内存位置 mDirect3DDevice
而不是 mDirect3DDevice
的内容。
希望对您有所帮助!
转换确实是将一种类型转换为另一种类型,或者更准确地说,将一种类型的值转换为另一种类型的值。
在你的例子中,你正在将一个指针转换为任何 mDirect3DDevice
指向 void *
.
的指针
不过,一般来说,重新解释转换指针不是很有用,因为您无法保证结果有用。唯一合理的重新解释转换是:
- 往返于
void *
,它们是往返保值的(也就是说,任何对象指针都可以转换为指向 void
的指针,然后返回,您将获得原始值), 但这些应该用 static_cast
s;
- 往返于
char *
,这对于访问底层字节表示的对象很有用(例如用于序列化);
- 在指向与布局兼容的标准布局类型(例如联合的通用初始序列或整数类型的签名版本)的指针之间。
重新解释指针 并取消引用结果 允许您假装一种类型的值实际上是另一种类型的值 - 这只在非常狭窄的集合中才有意义情况。
我知道您可以将 int 等类型转换为 float,但什么是转换指针?
例如,我一直在查看 Direct X 的一些代码 API
reinterpret_cast<void**>(&mDirect3DDevice)
我不明白这里发生了什么。我认为转换是当您基本上将一种类型转换为另一种类型时。
我相信任何变量都可以转换为指针,因为指针指向该变量在内存中的位置。所以在这种情况下 mDirect3DDevice
之前的 &
returns 变量的内存位置 mDirect3DDevice
而不是 mDirect3DDevice
的内容。
希望对您有所帮助!
转换确实是将一种类型转换为另一种类型,或者更准确地说,将一种类型的值转换为另一种类型的值。
在你的例子中,你正在将一个指针转换为任何 mDirect3DDevice
指向 void *
.
不过,一般来说,重新解释转换指针不是很有用,因为您无法保证结果有用。唯一合理的重新解释转换是:
- 往返于
void *
,它们是往返保值的(也就是说,任何对象指针都可以转换为指向void
的指针,然后返回,您将获得原始值), 但这些应该用static_cast
s; - 往返于
char *
,这对于访问底层字节表示的对象很有用(例如用于序列化); - 在指向与布局兼容的标准布局类型(例如联合的通用初始序列或整数类型的签名版本)的指针之间。
重新解释指针 并取消引用结果 允许您假装一种类型的值实际上是另一种类型的值 - 这只在非常狭窄的集合中才有意义情况。