新手求问ints数组加了元素为什么a数组元素一起变,然后ints数组长超过a数组了,a数组为什么长度不增加?是值传递还是引用传递?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
数组是定长的 切片是可以根据容量扩容的 切片容量没有达到扩容前,是和数组a共享同样的空间的,扩容后就会申请新的内存空间,此时就跟被切片的数组没有任何关系了。
a是数组,ints是切片
看下slice数据结构就知道了。另外这种变态写法,只有考试题会遇到吧。 一般这样写
a := [...]int{1, 2, 3, 4, 5} b := a[:3:3] //让 a底层数组与b分离
数组是定长定类型的,根据下标访问容器元素,out of range 只会panic报错。
ints是切片,属于动态容器,不定长的,每一次扩容cab会*2(或+2)找到一片新的连续内存,把元素拷贝过去。
golang中只有slice、map、interface、channel、pointer属于引用类型,其他都是值类型,譬如array
`单行代码`
数组是定长的 切片是可以根据容量扩容的 切片容量没有达到扩容前,是和数组a共享同样的空间的,扩容后就会申请新的内存空间,此时就跟被切片的数组没有任何关系了。
a是数组,ints是切片
看下slice数据结构就知道了。另外这种变态写法,只有考试题会遇到吧。 一般这样写
数组是定长定类型的,根据下标访问容器元素,out of range 只会panic报错。
ints是切片,属于动态容器,不定长的,每一次扩容cab会*2(或+2)找到一片新的连续内存,把元素拷贝过去。
golang中只有slice、map、interface、channel、pointer属于引用类型,其他都是值类型,譬如array