go语言中为什么使用切片指针?
2021-07-23 本文已影响0人
louyang
这仍然是一个值传递和地址传递的问题, 直接看例子:
package main
import (
"fmt"
)
func main() {
slice:= []string{"a","a"}
func(slice []string){
slice= append(slice, "a")
slice[0]="b";
slice[1]="b";
fmt.Print(slice)
}(slice)
fmt.Print(slice)
}
运行结果是[b b a][a a]
,所以函数里的改动没有传递到函数外面,这就是值传递。
再看地址传递的例子:
func main() {
slice:= []string{"a","a"}
func(slice *[]string){
(*slice) = append((*slice), "a")
(*slice)[0]="b";
(*slice)[1]="b";
fmt.Print(*slice)
}(&slice)
fmt.Print(slice)
}
运行结果是:[b b a][b b a]