C# C CS0019 IntPtr
我遇到了一段C源代码,如下所示C# C CS0019 IntPtr,c#,.net,compiler-errors,intptr,C#,.net,Compiler Errors,Intptr,我遇到了一段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,这取决于操作系统。这是正确的吗?我如何使代码编译?如果要使用指针,必须将代码包装在不安全的{}中,并在项目属性中翻转“允许不安全”开
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
{
//pointer code here
}
如果要使用指针,必须将代码包装在不安全的{}中,并在项目属性中翻转“允许不安全”开关
unsafe
{
//pointer code here
}
不,它的语法不正确。现在还不清楚你想要完成什么,所以就在这里猜测吧。如果要将指针向前移动w int,请使用:
int* ptr3 = ptr + w;
它将指针值增加4*w,因为int是4字节。这相当于将ptr3视为指向int数组的指针,其中w是数组元素偏移量。C语言处理指针的方式
如果您打算将地址增加w,然后避免使用IntPtr,那么C语言禁止在IntPtr上使用+运算符,即使CLR允许这样做。您需要进行一些铸造:
int* ptr3 = (int*)((byte*)ptr + w);
不,它的语法不正确。现在还不清楚你想要完成什么,所以就在这里猜测吧。如果要将指针向前移动w int,请使用:
int* ptr3 = ptr + w;
它将指针值增加4*w,因为int是4字节。这相当于将ptr3视为指向int数组的指针,其中w是数组元素偏移量。C语言处理指针的方式
如果您打算将地址增加w,然后避免使用IntPtr,那么C语言禁止在IntPtr上使用+运算符,即使CLR允许这样做。您需要进行一些铸造:
int* ptr3 = (int*)((byte*)ptr + w);
旁注:如果你不知道代码应该做什么,也许你还不应该写它。。。你真的需要使用不安全的代码和指针吗?旁注:如果你不知道代码应该做什么,也许你还不应该写它。。。您真的需要使用不安全的代码和指针吗?未启用此选项将生成完全不同的错误消息。未启用此选项将生成完全不同的错误消息。我正在尝试将指针地址增加w。因为int类型在x86上是4字节,在64位操作系统上是8字节,所以我只想确保代码在任何一台机器上都能工作。int在任何体系结构上都是4字节。我试图将指针地址增加w。因为int类型在x86上是4字节,在64位操作系统上是8字节,所以我只想确保代码在任何一台机器上都能工作。