新手求问数组问题

haiqishiwo · 2019-03-11 23:40:45 · 861 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-03-11 23:40:45 的主题,其中的信息可能已经有所发展或是发生改变。

新手求问ints数组加了元素为什么a数组元素一起变,然后ints数组长超过a数组了,a数组为什么长度不增加?是值传递还是引用传递?无标题.png


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

861 次点击  
加入收藏 微博
4 回复  |  直到 2019-03-12 15:37:44
Moyye
Moyye · #1 · 6年之前

数组是定长的 切片是可以根据容量扩容的 切片容量没有达到扩容前,是和数组a共享同样的空间的,扩容后就会申请新的内存空间,此时就跟被切片的数组没有任何关系了。

Aimiyoo
Aimiyoo · #2 · 6年之前

a是数组,ints是切片

Rnben
Rnben · #3 · 6年之前

看下slice数据结构就知道了。另外这种变态写法,只有考试题会遇到吧。 一般这样写

a := [...]int{1, 2, 3, 4, 5}
b := a[:3:3]  //让 a底层数组与b分离
chainkayser
chainkayser · #4 · 6年之前

数组是定长定类型的,根据下标访问容器元素,out of range 只会panic报错。

ints是切片,属于动态容器,不定长的,每一次扩容cab会*2(或+2)找到一片新的连续内存,把元素拷贝过去。

golang中只有slice、map、interface、channel、pointer属于引用类型,其他都是值类型,譬如array

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传