1

我遇到了一段 C# 源代码如下

int* ptr = ...;
int  w = ...;

int* ptr3 = ptr + (IntPtr)w;

CS0019: Operator '+' cannot be applied to operands of type 'int*' and 'System.IntPtr'

我猜这段代码试图将 ptr 地址向前移动 w 这取决于操作系统。这是正确的,我怎样才能编译这段代码?

4

2 回答 2

3

如果要使用指针,则必须将代码包装在 unsafe { } 中并翻转项目属性中的允许不安全开关

在此处输入图像描述

unsafe 
{
  //pointer code here
}
于 2012-12-23T05:24:09.137 回答
2

不,这不是正确的语法。目前还不清楚您要完成什么,所以只是在这里猜测。如果要将指针向前移动“w”整数,请使用:

  int* ptr3 = ptr + w;

由于 int 是 4 个字节,因此将 4*w 添加到指针值。这相当于将 ptr3 视为指向 int 数组的指针,其中 w 是数组元素的偏移量。以及 C 语言处理指针的方式。

如果您打算将地址增加 w,然后避免使用 IntPtr,C# 语言禁止在 IntPtr 上使用 + 运算符,即使 CLR 允许这样做。你需要做一些转换:

  int* ptr3 = (int*)((byte*)ptr + w);
于 2012-12-23T08:23:01.053 回答