go语言用数组转换 go语言 数组( 三 )


cap是在初始化切片是生成的容量 。
发现切片的结构体是数组的地址指针array unsafe.Pointer,而Go中数组的地址代表数组结构体的地址 。
slice 中得到一块内存地址 , array[0]或者unsafe.Pointer(array[0]) 。
也可以通过地址构造切片
nil切片:指的unsafe.Pointer 为nil
空切片:
创建的指针不为空 , len和cap为空
当一个切片的容量满了,就需要扩容了 。怎么扩 , 策略是什么?
如果原来数组切片的容量已经达到了最大值,再想扩容,Go 默认会先开一片内存区域,把原来的值拷贝过来 , 然后再执行 append() 操作 。这种情况对现数组的地址和原数组地址不相同 。
从上面结果我们可以看到,如果用 range 的方式去遍历一个切片 , 拿到的 Value 其实是切片里面的值拷贝,即浅拷贝 。所以每次打印 Value 的地址都不变 。
由于 Value 是值拷贝的 , 并非引用传递,所以直接改 Value 是达不到更改原切片值的目的的,需要通过 slice[index] 获取真实的地址 。
【go语言用数组转换 go语言 数组】go语言用数组转换的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言 数组、go语言用数组转换的信息别忘了在本站进行查找喔 。

推荐阅读