我们知道 golang 中 slice 是引用类型,我声明长度为 10 的 slice,往其中插入了 6 个元素。打印能看到 addres4、addres5 地址相同,但是在 main 中打印 slice 的值和在 someChage
方法中打印的结果竟然不一样,请问大佬,这是什么原因?
代码:
package main
import "fmt"
func someChage(slice []int) {
fmt.Printf("addres2: %p\n", slice)
slice = append(slice, 1, 2, 3)
fmt.Printf("addres3: %p\n", slice)
slice = append(slice, 4, 5, 6)
fmt.Printf("addres4: %p\n", slice)
fmt.Println(slice)
}
func main() {
slice := make([]int, 0, 20)
fmt.Printf("addres1: %p\n", slice)
someChage(slice)
fmt.Printf("addres5: %p\n", slice)
fmt.Println(slice)
}
结果:
addres1: 0xc00007a000
addres2: 0xc00007a000
addres3: 0xc00007a000
addres4: 0xc00007a000
[1 2 3 4 5 6]
addres5: 0xc00007a000
[]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.