我遇到了一段 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 这取决于操作系统。这是正确的,我怎样才能编译这段代码?
我遇到了一段 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 这取决于操作系统。这是正确的,我怎样才能编译这段代码?
如果要使用指针,则必须将代码包装在 unsafe { } 中并翻转项目属性中的允许不安全开关
unsafe
{
//pointer code here
}
不,这不是正确的语法。目前还不清楚您要完成什么,所以只是在这里猜测。如果要将指针向前移动“w”整数,请使用:
int* ptr3 = ptr + w;
由于 int 是 4 个字节,因此将 4*w 添加到指针值。这相当于将 ptr3 视为指向 int 数组的指针,其中 w 是数组元素的偏移量。以及 C 语言处理指针的方式。
如果您打算将地址增加 w,然后避免使用 IntPtr,C# 语言禁止在 IntPtr 上使用 + 运算符,即使 CLR 允许这样做。你需要做一些转换:
int* ptr3 = (int*)((byte*)ptr + w);