gpt4 book ai didi

c# - 为什么我们不能在 C# 中进行 IntPtr 和 UIntPtr 运算?

转载 作者:太空狗 更新时间:2023-10-29 21:06:43 33 4
gpt4 key购买 nike

这是一个看起来很简单的问题:

鉴于 native 大小的整数最适合算术,为什么 C#(或任何其他 .NET 语言)不支持使用 native 大小的算术 IntPtrUIntPtr

理想情况下,您可以编写如下代码:

for (IntPtr i = 1; i < arr.Length; i += 2) //arr.Length should also return IntPtr
{
arr[i - 1] += arr[i]; //something random like this
}

这样它就可以在 32 位和 64 位平台上运行。 (目前,您必须使用 long 。)


编辑:

没有将它们用作指针(甚至没有提到“指针”这个词)!它们可以被视为 native int 的 C# 对应物。在 MSIL 和 intptr_t在 C 中 stdint.h -- 是整数,不是指针。

最佳答案

在 .NET 4 中,IntPtr 类型的左手操作数与整数类型的右手操作数(intlong)之间的算术运算等)支持。

[编辑]:正如其他人所说,它们旨在表示本地语言中的指针(正如名称 IntPtr 所暗示的那样)。可以声称您将它们用作 native 整数而不是指针,但您不能忽视整数的 native 大小一直很重要的主要原因之一是用作指针。如果您要执行数学运算或其他独立于运行代码的处理器和内存体系结构的通用函数,则可以说使用 intlong,无论硬件如何,您都知道它们在每种情况下的固定大小和上限和下限。

正如 IntPtr 类型被设计用来表示本地指针一样,算术运算被设计用来表示您将对指针执行的逻辑数学运算:将一些整数偏移量添加到本地指针到达一个新的 native 指针(不是不支持添加两个 IntPtr,也不使用 IntPtr 作为右手操作数)。

关于c# - 为什么我们不能在 C# 中进行 IntPtr 和 UIntPtr 运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5589846/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com