首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntPtr vs UIntPtr

IntPtr vs UIntPtr
EN

Stack Overflow用户
提问于 2009-08-24 02:57:47
回答 3查看 5.4K关注 0票数 12

这应该很简单:我看到到处都有人在使用IntPtr,有什么理由我应该使用UIntPtr吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-24 03:04:00

似乎没有很好的理由这样做。从文档中:

备注

..。

IntPtr类型与CLS兼容,而UIntPtr类型不兼容。在公共语言运行库中仅使用IntPtr类型。提供UIntPtr类型主要是为了维护与IntPtr类型的体系结构对称性。

票数 8
EN

Stack Overflow用户

发布于 2009-08-24 03:16:01

according to Microsoft UIntPtr主要是为了架构对称性而提供的。另一个有趣的地方是UIntPtr不兼容CLS。

从表面上看,IntPtr似乎是首选。然而,如果你知道你要进行指针运算,那么UIntPtr可能是一个更好的选择,因为在极小的机会中,有一些处理负值的模糊问题。

票数 8
EN

Stack Overflow用户

发布于 2014-08-31 01:15:26

这有很大的不同..例如,在32位应用程序上,新的UIntPtr(0xC01E0001)会产生一个3223191553的指针,而IntPtr(0xC01E0001)会产生一个System.OverflowException:“算术运算导致溢出”。这是因为0xC01E0001大于Int32的MaxValue。

因此,如果仍然需要这样的指针,则需要使用负整数作为IntPtr的内部值,例如

代码语言:javascript
复制
unchecked((IntPtr)(int)0xC01E0001)

回答你的问题:对于大于Int32.MaxValue的值,使用UIntPtr更容易,也更干净。这可能是最好的解决方案,因为指针总是被认为是无符号的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1320296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档