代码之家  ›  专栏  ›  技术社区  ›  Machta

复制数组时出现问题

  •  1
  • Machta  · 技术社区  · 15 年前

    我有以下代码:

    string[] firstArray = { "bla bla", "bla bla", "bla bla"};   
    string[] secondArray = {"aaaaaaaaaaaa", "aaaaaaaaaaa", "aaaaaaaaa"};    
    
    string[] newArray = firstArray;
    
    firstArray = secondArray;
    
    foreach (string item in newArray)
    {
         Console.WriteLine(item);
    } 
    

    此代码给出以下结果:
    布拉布拉
    布拉布拉
    布拉布拉

    我无法理解为什么在为FirstArray分配不同的实例后,NewArray具有相同的内容。请帮帮我。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Matthew Flaschen    15 年前

    您要分配对数组的引用,而不是数组本身。

    string[] firstArray = { "bla bla", "bla bla", "bla bla"};   
    

    FirstArray引用了blabla数组。

    string[] secondArray = {"aaaaaaaaaaaa", "aaaaaaaaaaa", "aaaaaaaaa"};    
    

    secondarray引用了aaaaaaaaaaaa数组。

    string[] newArray = array;
    

    我想有一个 array = firstArray 在某个地方。newarray与firstarray(blabla)保存对同一数组的引用。

    array = secondArray;
    

    数组与secondarray(aaaaaaaaaaa)保存对同一数组的引用。

    foreach (string item in newArray)
    

    newarray仍然保留对blabla数组的引用,因此打印。

        2
  •  0
  •   Hun1Ahpu    15 年前

    因为您只更改对数组的引用。所以newarray将引用firstarray,然后更改firstarray引用,但是newarray仍然引用前面的blablabla数组。

        3
  •  0
  •   abelenky    15 年前
    string[] newArray = array;
    array = secondArray;
    

    array 是未声明的未定义变量。 我不知道你怎么分配 newArray 或者设置为 secondArray .

    你也提到了两者 firstArray firstarray 不起作用。

        4
  •  0
  •   Extrakun    15 年前

    我假设当您在代码中编写“array”时,您的意思是“firstarray”。

    没有更改,因为您根本没有分配给newarray。newarray是一个引用;当您键入string[]newarray=array时,它指向与firstarray相同的地址。将FirstArray分配给SecondArray时,只需更改FirstArray指向的位置。这不会更改newarray指向的位置。

    基本概念是C中的引用变量指的是内存地址。这不是平等的概念。也就是说,A=B,而设置B=C,这不会改变A。将其视为

    a = address 1
    b = address 2
    c = address 3
    

    当你做a=b时,

    a = address 2
    b = address 2
    c = address 3
    

    当你这样做时,b=c

    a = address 2
    b = address 3
    c = address 3