函数调用中,go语言切片是地址传递。能修改实参切片中的元素,不能修改实参切片指向的地址。
func main() {
t := []int{1, 2, 3, 4}
ts(t)
fmt.Println(t) // 输出: [10 2 3 4]
}
func ts(ft []int) {
ft[0] = 10
}
如上:t 和 ft 两个切片指向同一个地址,ft 修改时 t 也会被修改。
想修改切片指向的地址要传切片的指针。
func main() {
t := make([]int, 0)
t = append(t, []int{1,2,3,4}...)
tt(&t)
fmt.Printf("1--%p \n",t) //%p打印地址
fmt.Println(t) // [2 3 4]
}
func tt(t *[]int) {
f := (*t)[1:]
*t = f
fmt.Println(f, *t)
}
func tt2(t []int) {
t := t[1:]
fmt.Println(t)
}
tt 函数传递切片的指针,可以改变main函数切片指向的地址。