深入理解Go语言中的数组和切片

2020-01-28 11:59:12于丽

这里直接打印了slice的指针值,因为slice是引用类型,所以指针值都是相同的,我们换成打印slice的地址看下


func rmLast(a []int) {
 fmt.Printf("[rmlast] the address of a is %p", &a)
 a = a[:len(a)-1]
 fmt.Printf("[rmlast] after remove, the address of a is %p", &a)
}
func main() {
 xyz := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
 fmt.Printf("[main] the address of xyz is %pn", &xyz)
 rmLast(xyz)
 fmt.Printf("[main] after remove, the address of xyz is %pn", &xyz)
 fmt.Printf("%v", xyz) //[1 2 3 4 5 6 7 8 9]
}

结果:


[main] the address of xyz is 0xc20801e1e0
[rmlast] the address of a is 0xc20801e200
[rmlast] after remove, the address of a is 0xc20801e200
[main] after remove, the address of xyz is 0xc20801e1e0
[1 2 3 4 5 6 7 8 9]

这次可以看到slice作为函数参数传入函数时,实际上也是拷贝了一份slice,因为slice本身是个指针,所以从现象来看,slice是引用类型

总结

以上就是这篇文章的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。