DotNet - 什么是int *?

时间:2010-07-13 15:04:47

标签: c# .net pointers

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

这是什么意思?

3 个答案:

答案 0 :(得分:15)

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

unsafe
{
    int i = 5;
    int* p = &i;
    // Invoke with pointer to i
    Method(p);
}

'不安全'代码C#

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

答案 1 :(得分:6)

这是一个pointer to an int。通常在托管代码中最好避免。您可能希望发布导入的方法声明。对于这种互操作,IntPtr通常就足够了。

答案 2 :(得分:2)

这取决于您使用的语言。在C#中,您应该使用“ref”关键字声明参数。在VB.NET中,您应该使用ByRef关键字。你需要通过传递变量而不是常量来调用它。像这样:

 int retval = 0;
 Method(ref retval);
 // Do something with retval
 //...