为什么使用此代码:
unsafe
{
for (int i = 0; i < 10; i++)
{
Double w = new Double();
Console.WriteLine((IntPtr)(&w));
}
}
我总是得到相同的号码?如何在循环中创建新变量?有了新地址吗?
为什么这对我来说是一个问题的原因是我需要生成一个随机的双数,然后我在两个对象中使用一个指针(引用该双精度)。在其中一个对象中,我正在更改此值,我希望它也可以更改其他对象:)
答案 0 :(得分:14)
逻辑上,每次循环都是一个新变量。但是我希望你不会期望每次都有新的变量实际被分配到堆栈中!如果循环运行一百万次怎么办?编译器知道它可以重用存储,而且确实可以。
如果您想要十个不同的地址,请创建一个包含十个元素的数组,将其固定到位,并获取每个元素的地址。
答案 1 :(得分:2)
您似乎想要分享对值类型的值的引用。因此,可以通过将值类型包装到引用类型:
来完成class Ref<T>
{
public T Value { get; set; }
}
另请参阅相关问题:C# - Good and flexible way to pass value types by reference?。