2

为什么使用此代码:

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

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

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

4

2 回答 2

14

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

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

于 2013-09-28T23:02:32.170 回答
2

看来您想共享对值类型的值的引用。因此,可以通过将值类型包装到引用类型中来完成:

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

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

于 2013-09-28T23:23:24.473 回答