我有以下代码:
class Program
{
private unsafe static void SquarePtrParam(int* input)
{
*input *= *input;
}
private static void SquareRefParam(ref int input)
{
input *= input;
}
private unsafe static void Main()
{
int value = 10;
SquarePtrParam(&value);
Console.WriteLine(value);
int value2 = 10;
SquareRefParam(ref value2);
Console.WriteLine(value2);
//output 100, 100
Console.ReadKey();
}
}
在方法中传递指针和ref关键字作为参数有什么区别?
的ref
关键字的作用就像一个指针,而是从变化到在存储器中的对象的实际位置绝缘。指针是内存中的特定位置。对于垃圾收集的对象,此指针可能会更改,但是如果您使用fixed
语句阻止它,则不会更改。
您应该更改此:
SquarePtrParam(&value);
对此:
fixed (int* pValue = &value)
{
SquarePtrParam(pValue);
}
确保指针继续指向int
您期望的数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句