【问题标题】:What is the difference between referencing a value using a pointer and a ref keyword使用指针和 ref 关键字引用值有什么区别
【发布时间】:2014-04-28 04:45:04
【问题描述】:

我有以下代码:

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

【问题讨论】:

  • 您想知道为什么必须为此在 C# 项目设置中启用unsafe 选项吗?如果您只使用ref,则不必这样做。

标签: c# unsafe


【解决方案1】:

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

你应该改变这个:

SquarePtrParam(&value);

到这里:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-09-28
    • 2010-09-30
    • 2012-05-01
    • 2012-10-12
    • 2018-12-15
    • 1970-01-01
    • 2014-07-21
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多