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

17

我有以下代码:

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


3
你是否想知道为什么需要在C#项目设置中启用“unsafe”选项?如果只使用ref,则无需这样做。 - noseratio - open to work
1个回答

20
ref 关键字类似于指针,但与对象在内存中实际位置的更改隔离。指针是内存中的特定位置。对于垃圾回收对象,该指针可能会更改,但如果使用 fixed 语句进行防止,则不会更改。
您应该更改这个:
SquarePtrParam(&value);

转化为:

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

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

http://msdn.microsoft.com/zh-cn/library/f58wzh21.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接