How golang slice Semi - pointer.
golang slice怎么个半指针传递
起因 刷leetcode的77题时候,使用了递归方法,并且使用数组时候如下 result := make([][]int, 0, length+1) recursive([]int{}, 1, n, k, result) 第一次使用了cap声明slice,这样的好处是append时候在length后添加数据,并且保证长度够,append时候不会重新申请地址 但是跑的时候发现,recursive()后,在返回到此段代码,居然什么都没有!result值没变。 什么? slice不是传说的指针传递么? 先看下官方数组结构样子 当然,一直知道数组是半指针,就是将数组的地址的值传进去。在函数里是改变不了指针的值,但是可以操作指针指向的数据,详细的google有很多 我想象的是这样:函数收到的是数组的头地址(就是图最上面的指针),length和cap等数据,这样可以完全接管数组的操作了 但是上述起因里出现的问题却不是这样,到底是什么原因呢?于是写了测试代码 func main() { result := make([]int, 0, 10) addr := &result fmt.Println("result:", result, "addr:", unsafe.Pointer(addr)) for i := 0; i < 10; i++ { functions(result) result = append(result, i) //appendData(result,i) } fmt.Println("result:", result, "addr:", unsafe.Pointer(addr)) } func functions(arr []int) { addr := &arr if len(arr) > 0 { fmt.