【发布时间】:2011-06-21 19:49:43
【问题描述】:
我不明白什么是 IntPtr,有人可以解释一下吗? 谢谢
【问题讨论】:
我不明白什么是 IntPtr,有人可以解释一下吗? 谢谢
【问题讨论】:
它是一个与指针大小相同的整数。 32位图像32位宽,64位图像64位宽。
【讨论】:
它是void* 的托管对应物。
您可以在void* 之间进行转换以在托管代码中使用,而无需求助于托管层中的不安全代码,例如C#。
【讨论】:
它是一种特定于 .NET 平台的类型,用于表示指针或句柄。
IntPtr 类型被设计为一个整数,其大小是特定于平台的。也就是说,这种类型的实例在 32 位硬件和操作系统上预计为 32 位,在 64 位硬件和操作系统上预计为 64 位。
支持指针的语言可以使用 IntPtr 类型,并且可以作为在支持和不支持指针的语言之间引用数据的常用方法。
IntPtr 对象也可用于保存句柄。例如,在 System.IO.FileStream 类中广泛使用 IntPtr 的实例来保存文件句柄。
(来自MSDSN)
【讨论】:
这是关于 c 和 c++ 类型的 intptr_t 但原理是一样的。 What is uintptr_t data type
【讨论】:
【讨论】:
一个指针大小的黑盒。有时您的语言不支持不安全的代码/指针,因此需要在 API 中使用 IntPtr。
我认为自 .net 2 以来它的使用已经减少,因为它的许多用例更适合安全句柄。
【讨论】: