数组与切片的区别

wzwmzm · · 1830 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

A, 数组是固定长度的,所以在创建时要指明长度,而切片长度是可变的,创建时不用标明长度,比如: 数组: d1 := [...]int{1, 2, 3} 切片: d2 := []int{1,2,3} B, 数组的操作是传值的,有拷贝动作,切片的操作实质是指针操作。如下: a := [5]int{1, 2, 3, 4, 5} b := a b[1] = 0 c := []int{} c = a[:] c[2] = 9 fmt.Println(a) fmt.Println(b) fmt.Println(c) 结果: [1 2 9 4 5] [1 0 3 4 5] [1 2 9 4 5] b:=a其实是复制了一份a给b,所以修改b不影响a。c=a[:]是将a的地址传给了c,所以可以看到结果a和c是联动的。 总结:切片是引用,必须要基于实体即内存。这个实体可以是数组,也可以是用make(type, len, cap)创建的一块类似数组的内存。

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

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

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