go语言 – 切片(slice)修改

切片不拥有自己的任何数据。它只是底层数组的一种表示。对切片所做的任何修改都将影响底层数组。

package main

import (  
    "fmt"
)

func main() {  
    darr := [...]int{57, 89, 90, 82, 100, 78, 67, 69, 59}
    dslice := darr[2:5]
    fmt.Println("array before",darr)
    for i := range dslice {
        dslice[i]++
    }
    fmt.Println("array after",darr) 
}

代码行dslice := darr[2:5],从数组的索引2、3、4创建dslice。for循环将这些索引中的值加1。在for循环之后打印数组,可以看到切片的修改反映在数组中了。程序的输出是

array before [57 89 90 82 100 78 67 69 59]  
array after [57 89 91 83 101 78 67 69 59]  

当许多切片共享相同的底层数组时,每个切片所做的更改,都将反映在数组中。

package main

import (  
    "fmt"
)

func main() {  
    numa := [3]int{78, 79 ,80}
    nums1 := numa[:] //创建一个包含数组所有元素的slice
    nums2 := numa[:]
    fmt.Println("array before change 1",numa)
    nums1[0] = 100
    fmt.Println("array after modification to slice nums1", numa)
    nums2[1] = 101
    fmt.Println("array after modification to slice nums2", numa)
}

numa[:]中,起始值和结束值都省略了,它们的默认值分别是0len(numa)。切片nums1nums2共享同一个数组。程序的输出是

array before change 1 [78 79 80]  
array after modification to slice nums1 [100 79 80]  
array after modification to slice nums2 [100 101 80]  

从输出中可以清楚地看到,当切片共享相同的数组时,每个切片所做的修改将反映在数组中。



浙ICP备17015664号-1 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载