我不明白为什么要反转第二个数组,也要反转第一个数组...感谢任何可以解释原因的人。
char[] input = { 'h', 'e', 'l', 'l', 'o' };
char[] inputnew = input;
Array.Reverse(inputnew);
Console.WriteLine(new string(input));
Console.WriteLine(new string(inputnew));
输出: 奥列 olleh
答案 0 :(得分:2)
第一个数组(input)的内存地址指向第二个数组(inputnew),因此,任何一个更改都将影响这两个变量。 / p>
因为两个变量指向相同的内存地址。
引用类型始终指向内存地址。值类型总是指向值
更多详细信息http://net-informations.com/faq/general/valuetype-referencetype.htm
答案 1 :(得分:2)
此行:
char[] inputnew = input;
您将数组input
的 reference 复制到inputnew的 reference 。这就是面向对象编程的工作方式。您始终具有对象的引用。这就是为什么这些类型也称为引用类型的原因。另一方面,您有值类型,它们实际上复制了值,例如int
和boolean
。
如果要复制数组的实际值,则必须使用函数Array.Copy(sourceArray, TargetArray)
,如下所示:
char[] input = { 'h', 'e', 'l', 'l', 'o' };
char[] inputnew;
Array.Copy(input, inputNew);
Array.Reverse(inputnew);
Console.WriteLine(new string(input));
Console.WriteLine(new string(inputnew));
答案 2 :(得分:1)
这是因为=
不会创建数组的副本,而是您有两个引用指向非常相同的数组。>
换句话说,只有一个数组,其中有两个指向它的引用。
答案 3 :(得分:1)
好吧,唯一可能的答案-也许是正确的答案-是您实际上并没有复制阵列。当你写
char [] inputnew =输入; 您正在将对同一数组的引用分配到另一个变量中。换句话说,它们都指向同一个对象。
答案 4 :(得分:0)
通过引用传递。分配时,inputnew和input具有相同的索引。
如果您不想通过引用传递:
char[] inputnew = input.copyTo();
将完成工作。
答案 5 :(得分:0)
这是因为执行此操作时未分配值
char[] inputnew = input;
您正在做的是将 inputnew 指向内存中{ 'h', 'e', 'l', 'l', 'o' };
的位置。
因此,您将获得相同的输出。
P.s。尝试先启动 inputnew 数组,然后分配,看看会发生什么。
答案 6 :(得分:0)
要创建一个新数组,您应该使用Array.Copy方法, 您现在拥有的方式是inputNew只是对输入数组的引用。
您的代码应如下所示:
MessageBox.Show("Deleted!");
答案 7 :(得分:0)
由于内存中类型的行为,您遇到了此问题。实际上,建议您查看ValueType和引用类型主题。实际上,在这个阶段, char [] inputnew = input; ,您查看了输入的inputnew(C ++指针),因此,如果您要对inputnew进行处理,则输入过程会将其称为依赖列表。如果您不想受到此过程的影响,则应查看“克隆”锥体。