变量变化......另一个变量?

时间:2012-11-24 11:26:45

标签: c# variables int swap

在这里输入代码。我有一个名为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

2 个答案:

答案 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不指向同一个对象