关于切片越界的2个问题?

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

1,已知:切片的本质是对底层数组的封装,它包含三个信息(底层数组的指针,切片长度和切片容量) 问题:底层数组的指针指的是什么?是我们用“*”定义的那个指针吗? 2,如下代码所示 定义切片 a,定义,然后定义切片s,让切片s越界,为什么没有自动将切片a的容量加长一倍? ''' package main import "fmt" func main() { var a = []int{1, 2, 3, 4, 5, 6} var s = a[2:6] fmt.Printf("this%d\n", a) fmt.Printf("this%d\n", s) fmt.Printf("this%d\n", t) fmt.Printf("a长度%d,a容量%d\n", len(a), cap(a)) fmt.Printf("s长度%d,s容量%d\n", len(s), cap(s)) } ''' 3.然后在在改一下,修改切片是,避切片s越界,定义切片t,设置切片t越界s,这时切片t会将切片a视为底层数组,不报错t越界s,为什么? ''' package main import "fmt" func main() { var a = []int{1, 2, 3, 4, 5, 6, 7} var s = a[2:5] var t = s[2:5] fmt.Printf("this%d\n", a) fmt.Printf("this%d\n", s) fmt.Printf("this%d\n", t) fmt.Printf("a长度%d,a容量%d\n", len(a), cap(a)) fmt.Printf("s长度%d,s容量%d\n", len(s), cap(s)) fmt.Printf("t长度%d,t容量%d\n", len(t), cap(t)) }

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

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

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