0

考虑下面的 VB 代码:

    Dim speed() As Integer = {0, 1, 2, 3, 4}
    Dim speed2() As Integer
    speed2 = speed

    For i = 0 To UBound(speed2)
        speed2(i) *= 2
    Next

    Dim str As String
    For i = 0 To UBound(speed)
        str &= speed(i)
    Next

    For i = 0 To UBound(speed2)
        str &= speed2(i)
    Next
 Console.WriteLine(str)

对于此代码,答案应该是:12342468

但真正出现的是:24682468

有谁知道代码有什么问题或者为什么数组“速度”正在改变它的值?

4

2 回答 2

3

数组speed会更改其值,因为数组是引用类型。
像在行中一样将一个数组分配给另一个数组

 speed2 = speed

使数组speed2引用保存 的值的相同内存位置speed。因此,当您执行计算时,分配会影响使用的相同内存位置speed

于 2013-04-10T23:55:15.847 回答
1

这样做应该解决它

    Dim speed() As Integer = {0, 1, 2, 3, 4}
    Dim speed2() As Integer
    ReDim speed2(speed.GetUpperBound(0))
    Array.Copy(speed, 0, speed2, 0, speed.GetUpperBound(0) + 1)
于 2013-04-10T23:58:32.737 回答