我有以下代码:
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关键字作为参数传递有什么区别?
答案 0 :(得分:20)
ref
关键字的作用类似于指针,但与对象在内存中的实际位置的更改绝缘。指针是内存中的特定位置。对于垃圾收集的对象,此指针可能会更改,但如果您使用fixed
语句来阻止它,则不会更改。
你应该改变这个:
SquarePtrParam(&value);
到此:
fixed (int* pValue = &value)
{
SquarePtrParam(pValue);
}
确保指针继续指向您期望的int
数据。