介绍
1 | func Reverse(s []int) { |
在传入Reverse2函数之前,切片的cap不一致,这导致了在函数中append后,第一个函数中,s指向第一个元素的地址发生了变化,修改的不再是函数外的切片。
第二个函数经过3次append,cap已经是4了,这样即使在函数中再append一次,内存也不会发生再次分配,这样修改的还是函数外的切片。
为了验证这一点,我们可以把地址都打印出来:
1 | func Reverse(s []int) { |
打印如下:
1 | ➜ [/Users/rootliu/go/src/6.824/demo] git:(master) ✗ go run demo.go |
可以得出结论:
1、函数参数切片时值传递,因为切片在函数中的地址跟外层不一样
2、发生内存扩充时,cap变了,指向第一个元素的地址也发生了变化