这是一个看似简单的问题:
鉴于本机大小的整数最适合算术,为什么 C#(或任何其他 .NET 语言)不支持本机大小的算术IntPtr
and UIntPtr
?
理想情况下,您可以编写如下代码:
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
.)
Edit:
I'm not使用它们作为指针(甚至没有提到“指针”这个词)!它们可以被视为 C# 的对应项native int
在 MSIL 和intptr_t
in C's stdint.h
-- 它们是整数,not指针。
在 .NET 4 中,左手操作数之间的算术运算IntPtr
和整数类型的右手操作数 (int
, long
, etc) is支持的。
[编辑]:
正如其他人所说,它们被设计为表示本机语言中的指针(如名称 IntPtr 所暗示的那样)。可以声称您将它们用作本机整数而不是指针,但您不能忽视整数的本机大小重要的主要原因之一是用作指针。如果您正在执行数学运算或其他独立于代码运行的处理器和内存架构的通用函数,那么使用诸如int
and long
无论硬件如何,您都知道每种情况下它们的固定大小以及上限和下限。
正如类型一样IntPtr
旨在表示本机指针,算术运算旨在表示您将在指针上执行的逻辑数学运算:向本机指针添加一些整数偏移量以达到新的本机指针(而不是添加两个IntPtr
s 不受支持,也不使用IntPtr
作为右侧操作数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)