golang切片函数传递疑惑!!!求解答

84 阅读1分钟

切片传递问题

package main

import "fmt"

func main() {
  // 声明一个长度为3 容量为5 的切片
  // 切片 引用传递
	arr := make([]int, 3, 5)
  // 打印地址
	fmt.Printf("Before main: %p, len: %d, cap: %d\n", arr, len(arr), cap(arr))
	addSlice(arr)
	fmt.Printf("After main: %p, len: %d, cap: %d\n", arr, len(arr), cap(arr))
	for i := 0; i < len(arr); i++ {
		println(arr[i])
	}
}

func addSlice(arr []int) {
	fmt.Printf("Before append: %p, len: %d, cap: %d\n", arr, len(arr), cap(arr))
  // 修改第一个元素值
	arr[0] = 100
  // 追加一个元素, 切片容量足够,不需要扩容
	arr = append(arr, 1)
	fmt.Printf("After append: %p, len: %d, cap: %d\n", arr, len(arr), cap(arr))
}

执行结果:

image.png

疑惑点:

切片是引用传递,为啥main()中打切片,没有追加的元素,并且切片地址没有发生变化,求大佬解答