下面这段代码输出什么?
func change(s ...int) {
s = append(s,3)
}
func main() {
slice := make([]int,5,5)
slice[0] = 1
slice[1] = 2
change(slice...)
fmt.Println(slice)
change(slice[0:2]...)
fmt.Println(slice)
}
参考答案及解析:
[1 2 0 0 0]
[1 2 3 0 0]
知识点:可变函数、append()操作。Go 提供的语法糖…,可以将 slice 传进可变函数,不会创建新的切片。第一次调用 change() 时,append() 操作使切片底层数组发生了扩容,原 slice 的底层数组不会改变;第二次调用change() 函数时,使用了操作符[i,j]获得一个新的切片,假定为 slice1,它的底层数组和原切片底层数组是重合的,不过 slice1 的长度、容量分别是 2、5,所以在 change() 函数中对 slice1 底层数组的修改会影响到原切片。

Go语言中可变参数与切片的深入理解

本文通过一段代码示例探讨了Go语言中可变函数`change`与`append`操作如何影响切片。在第一次调用`change`函数时,切片底层数组发生扩容,原切片不变;第二次调用时,通过切片操作传递子切片,导致在`change`函数内对子切片的修改影响到了原切片。这展示了Go语言中切片与底层数组的关联性以及可变参数的特性。
4172

被折叠的 条评论
为什么被折叠?



