Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C CS0019 IntPtr_C#_.net_Compiler Errors_Intptr - Fatal编程技术网

C# C CS0019 IntPtr

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,这取决于操作系统。这是正确的吗?我如何使代码编译?如果要使用指针,必须将代码包装在不安全的{}中,并在项目属性中翻转“允许不安全”开

我遇到了一段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 
{
  //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字节,所以我只想确保代码在任何一台机器上都能工作。