数组与切片

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

数组与切片的概念在其它语言中也有,之前我是没有搞明白他们之间的关系的。今天做了下总结 区别:数组是值类型,切片是引用类型,在使用的时候有区别。 如果用一个数组A创建新数组B的时候,需要将A中的所有元素全部复制一遍过去。如果是切片的话,就会指向原来的数据。 数组赋值拷贝见下面例子 func main() { var a [10]int = [10]int{1, 2, 3} b := a b[0] = 2 fmt.Printf("%d,%d", (int)(a[0]), (int)(b[0])) } 输出的结果 1,2 创建过程也不同: 数组的创建使用 = []type{}创建,初始数据为0。 切片创建有两种,通过已经存在数组创建或者通过make创建 a := b[0:3] a:= make([]int, 10, 20) 数组是静态不可变的,切片是动态长度可变的 make创建切片时候第三个参数就是该切片内存不够时候需要重新分配的粒度 func main() { c := make([]int,3,5) c = append(c,1,2,3,4) for _, v := range c { fmt.Printf("%d,",v) } fmt.Printf("\n新分配内存后切片容量%d", cap(c)) } 结果: 0,0,0,1,2,3,4, 新分配内存后切片大小10

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

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

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