为什么循环创建具有相同地址的变量?

时间:2013-09-28 22:57:51

标签: c#

为什么使用此代码:

unsafe
    {
        for (int i = 0; i < 10; i++)
        {
            Double w = new Double();
            Console.WriteLine((IntPtr)(&w));
        }
    }

我总是得到相同的号码?如何在循环中创建新变量?有了新地址吗?

为什么这对我来说是一个问题的原因是我需要生成一个随机的双数,然后我在两个对象中使用一个指针(引用该双精度)。在其中一个对象中,我正在更改此值,我希望它也可以更改其他对象:)

2 个答案:

答案 0 :(得分:14)

逻辑上,每次循环都是一个新变量。但是我希望你不会期望每次都有新的变量实际被分配到堆栈中!如果循环运行一百万次怎么办?编译器知道它可以重用存储,而且确实可以。

如果您想要十个不同的地址,请创建一个包含十个元素的数组,将其固定到位,并获取每个元素的地址。

答案 1 :(得分:2)

您似乎想要分享对值类型的值的引用。因此,可以通过将值类型包装到引用类型

来完成
class Ref<T>
{
    public T Value { get; set; }
}

另请参阅相关问题:C# - Good and flexible way to pass value types by reference?