【发布时间】:2017-02-17 09:57:39
【问题描述】:
我确实想了解以下两者之间的区别:
new IntPtr(pointer.ToInt64() + 0x4);
和
Marshal.ReadIntPtr(pointer + 0x4);
他们给出了不同的结果,但做的事情不一样吗?
如果可能的话,你能否提供一个实际的例子来说明我对它的误解是什么?
【问题讨论】:
-
没有。首先是将 4 添加到地址,因此 1000 + 4 = 1004。其次是指向 32 位数字(4 字节)的指针。因此,当您增加指针指针时,您一次移动 4 个字节,因此 1000 + (4 x 4 字节) = 1016。
-
IntPtr 常用于存储内存地址。这两个语句非常不同,第一个只是将地址增加 4。第二个也是这样做的,快速方式,and 读取内存。大概是为了检索一个指针值,一个存储在内存中的地址。
标签: c# marshalling intptr