1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package main import "fmt" func main() { y := []int{1, 2, 3, 4, 5} // slice 是传引用的,对内容的修改会影响到函数外,但是 append 不会影响到函数外 changeRef(y) fmt.Println(y) //[100,2,3,4,5] //取引用变量的地址传入指针实现 append 可以在函数内部修改,说明引用和指针确实不是同一个概念 appendPoint(&y) fmt.Println(y) z := [5]int{1, 2, 3, 4, 5} // 数组是传值的,对内容的修改不会影响到函数外 changeArray(z) fmt.Println(z) //[1,2,3,4,5] } func changeRef(x []int) { x[0] = 100 // 这里 对函数外没有影响 x = append(x, 6, 7, 8) //但是 append 的设计比较奇怪,他返回一个新的引用,由于函数对引用的(地址)仍然是传值的,若想改变必须用返回值实现 //同时 引用又不是一个指针 无法直接修改该地址处的值 } func changeArray(x [5]int) { x[0] = 100 } func appendPoint(x *[]int) { *x = append(*x, 4, 5, 6) } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步