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)
}