涉及知识点
- 函数参数调用中的引用传递和值传递区别
- Slice扩容规则
- append函数
引用传递和值传递的区别
- 传值:函数调用时会对参数进行拷贝,被调用方和调用方两者持有不相关的两份数据;
- 传引用:函数调用时会传递参数的指针,被调用方和调用方两者持有相同的数据,任意一方做出的修改都会影响另一方。
- 如何知道参数变量是引用还是值传递呢? 打印变量地址判断如果是一致就是引用传递,否则就是值传递
- 如何把值传递改成引用传递呢?参数类型前加
*
号, 传入的变量前加&
- 是否可以把slice变成值传递呢?
func main() {
a := []int{1,2,3}
b := "hello"
fmt.Printf("a-p: %p b-p: %p \n", a, &b)
a1(a, &b)
}
func a1(a []int, b *string) {
fmt.Printf("a-p: %p b-p: %p \n", a, b)
}
Slice扩容规则
append函数
练习部分
Q: 一个函数传参一个slice,先append再赋值和另一个函数先赋值再append,哪个会发生变化?
相关资料
函数的引用和值传递 by google