在这里输入代码。我有一个名为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
答案 0 :(得分:4)
两个变量都指向同一个数组。我的猜测是在代码中的某些时候你有类似的东西:
prevPos = curPos
当你真正想要的是
prevPos[0] = curPos[0]
prevPos[1] = curPos[1]
答案 1 :(得分:2)
它们可能是两个不同的变量,但它们指向同一个对象。
变量是一个编译时构造,它为存储位置提供名称。在运行时,存储位置是我们通常称为对象的。
如果你说
var foo = int[]{0,1};
var bar = foo;
您有一个可以通过两个变量访问的数组。无论你做什么都没关系
foo[0]++;
或您输入
bar[00]++;
结果是一样的。数组中的第一个整数加1。
只要变量的类型是引用类型(如数组),就会成立。如果变量的类型是值类型(如int或Point),则任何赋值都将创建副本
Point foo = new Point();
var bar = foo;
在这种情况下,bar和foo不指向同一个对象