DotNet - 什么是int*?

Kov*_*ovu 12 .net c# pointers

简单的问题,我导入一个DLL函数,参数是int*.当我尝试输入Method(0)时,我收到一条错误,上面写着:"int和int*无法转换".

那是什么意思?

jri*_*sta 15

这是一个经典的C表示法pointer to an int.每当类型后跟a时*,它表示该类型作为指向该类型的指针.在C#中,与C语言不同unsafe,除了在项目属性中启用不安全的代码之外,还必须明确定义函数以使用指针.指针类型也不能直接与具体类型互换,因此必须首先引用类型的引用.要在C#(或C&C++中)获取指向另一个类型(如int)的指针,必须&在要获取指针的变量前面使用解除引用运算符(&符号):

unsafe
{
    int i = 5;
    int* p = &i;
    // Invoke with pointer to i
    Method(p);
}
Run Code Online (Sandbox Code Playgroud)

'不安全'代码C#

下面是一些关于不安全代码和C#中指针使用的重要文章.


dka*_*man 6

它是指向int指针.通常在托管代码中最好避免.您可能希望发布导入的方法声明.对于这种互操作,IntPtr通常就足够了.

  • 取决于它的作用.如果它是一个数组,`int []`就是你想要的.如果它是一个句柄,`IntPtr`通常是最好的,特别是如果你计划传递0.如果你想要一个int的实际引用,`ref int`或`out int`可能会更好. (2认同)