1

ここにコードを入力してください`2 つの int を格納する curPos という変数があります。2 つの int を格納する 2 番目の変数 prevPos があります。

だから私は次のコードを持っています

Console.WriteLine("{0}, {1}", curPos[0], curPos[1]); // 1, 25
Console.WriteLine("{0}, {1}", prevPos[0], prevPos[1]); // 1, 25
                    curPos[0]++;

Console.WriteLine("{0}, {1}", curPos[0], curPos[1]); // 2, 25
Console.WriteLine("{0}, {1}", prevPos[0], prevPos[1]); // 2, 25

これはどのように可能であり、これは、表示されている最後の行に行ごとにステップアップしたときの正確なコードです http://www.youtube.com/watch?v=qkPKm7xEhac&feature=youtu.be

4

2 に答える 2

4

両方の変数が同じ配列を指しています。私の推測では、コードのある時点で次のようなものがあります。

prevPos = curPos

本当に欲しいものが

prevPos[0] = curPos[0]
prevPos[1] = curPos[1]
于 2012-11-24T11:31:02.430 に答える
2

これらは 2 つの異なる変数である可能性がありますが、同じオブジェクトを指しています。

変数は、保存場所に名前を付けるコンパイル時の構造です。実行時に、そのストレージの場所は、一般的にオブジェクトと呼ばれるものです。

あなたが言うなら

var foo = int[]{0,1};
var bar = foo;

2 つの変数を介してアクセスできる配列が 1 つあります。その後、あなたがするかどうかは問題ではありません

foo[0]++;

またはあなたが入力

bar[00]++;

結果は同じです。配列の最初の整数は 1 ずつ増加します。

これは、変数の型が配列などの参照型である限り当てはまります。変数の型が int や Point などの値型の場合、代入によってコピーが作成されます

Point foo = new Point();
var bar = foo;

この場合、bar と foo は同じオブジェクトを指していません。

于 2012-11-24T15:33:27.590 に答える