- 相关知识点
a. 函数实参到形参的传递永远是值拷贝
b. 函数参数 支持不定长参数,不定参数名在函数体 内相当于切片,对切片的操作同样适合对不定参数的操作
c. 切片是引用类型,值包含指向数组的指针
func test1(s ...int) { // s为不定长参数
s[0] = 888
}
func test2(s2 []int) {
s2[0] = 9999
}
func main() {
var a = [...]int{0, 1, 2, 3, 4, 5} // a是一个数组
var b = a[2:] // b是基于a的切片
b[0] = 1000 // 实际上修改的是底层数组
test1(b...) // 虽然是值拷贝,但是 切片是引用类型, 就算是值拷贝,传递过去的也包含 指向底层数组的指针
fmt.Println(b) // [888 3 4 5]
fmt.Println(a) // [0 1 888 3 4 5]
test2(b)
fmt.Println(b) //[9999 3 4 5]
fmt.Println(a) //[0 1 9999 3 4 5]
}