2

なぜこのコードで:

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

私はいつも同じ番号を取得していますか?ループで新しい変数を作成する方法は? 新しいアドレスで?

これが私にとって問題である理由は、ランダムな倍精度数を生成する必要があり、2 つのオブジェクトで (その倍精度を参照する) ポインターを使用しているためです。オブジェクトの1つでこの値を変更していますが、他のオブジェクトでも変更したい:)

4

2 に答える 2

14

論理的には、これはループを通過するたびに新しい変数になります。しかし、新しい変数が実際に毎回スタックから割り当てられるとは思わないでください。ループが 100 万回実行されるとどうなるでしょうか。コンパイラは、ストレージを再利用できることを認識しています。

10 個の異なるアドレスが必要な場合は、10 個の要素を持つ配列を作成し、それを所定の位置に固定して、各要素のアドレスを取得します。

于 2013-09-28T23:02:32.170 に答える
2

値型の値への参照を共有したいようです。したがって、値の型を参照型にラップすることで実行できます。

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

関連する質問も参照してください: C# - 参照によって値の型を渡すための優れた柔軟な方法? .

于 2013-09-28T23:23:24.473 に答える