1

在此处输入代码`我有一个名为 curPos 的变量,它存储两个整数。我有第二个变量 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

它们可能是两个不同的变量,但它们指向同一个对象。

变量是一种编译时构造,它为存储位置提供名称。在运行时,该存储位置就是我们通常所说的对象。

如果你说

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

您有一个可以通过两个变量访问的数组。随后,你是否这样做并不重要

foo[0]++;

或者你输入

bar[00]++;

结果是一样的。数组中的第一个整数加一。

只要变量的类型是引用类型(例如数组),这一点就成立。如果变量的类型是值类型,例如 int 或 Point,那么任何赋值都会创建一个副本

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

在这种情况下 bar 和 foo 不指向同一个对象

于 2012-11-24T15:33:27.590 回答