Array.reverse反转当前数组和初始数组,但是为什么呢?

时间:2018-10-12 05:13:59

标签: c# arrays reverse

我不明白为什么要反转第二个数组,也要反转第一个数组...感谢任何可以解释原因的人。

char[] input = { 'h', 'e', 'l', 'l', 'o' };
char[] inputnew = input;     
Array.Reverse(inputnew);
Console.WriteLine(new string(input));
Console.WriteLine(new string(inputnew));

输出: 奥列 olleh

8 个答案:

答案 0 :(得分:2)

第一个数组(input)的内存地址指向第二个数组(inputnew),因此,任何一个更改都将影响这两个变量。 / p>

因为两个变量指向相同的内存地址。

引用类型始终指向内存地址。值类型总是指向值

更多详细信息http://net-informations.com/faq/general/valuetype-referencetype.htm

答案 1 :(得分:2)

此行:

char[] inputnew = input;  

您将数组input reference 复制到inputnew的 reference 。这就是面向对象编程的工作方式。您始终具有对象的引用。这就是为什么这些类型也称为引用类型的原因。另一方面,您有值类型,它们实际上复制了,例如intboolean

如果要复制数组的实际值,则必须使用函数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)

c#数组中的

通过引用传递。分配时,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进行处理,则输入过程会将其称为依赖列表。如果您不想受到此过程的影响,则应查看“克隆”锥体。

look here