使用指针和ref关键字引用值有什么区别

时间:2014-03-21 00:56:58

标签: c# unsafe

我有以下代码:

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关键字作为参数传递有什么区别?

1 个答案:

答案 0 :(得分:20)

ref关键字的作用类似于指针,但与对象在内存中的实际位置的更改绝缘。指针是内存中的特定位置。对于垃圾收集的对象,此指针可能会更改,但如果您使用fixed语句来阻止它,则不会更改。

你应该改变这个:

SquarePtrParam(&value);

到此:

fixed (int* pValue = &value)
{
    SquarePtrParam(pValue);
}

确保指针继续指向您期望的int数据。

http://msdn.microsoft.com/en-us/library/f58wzh21.aspx