slice切片切割成数组,数组指针指向原slice的位置
切片理解#
切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。
举个例子,现在有一个数组
a := [8]int{0, 1, 2, 3, 4, 5, 6, 7}
,切片s1 := a[:5]
,相应示意图如下。
代码验证数组的指针:#
package main import "fmt" func main() { sl := make([]int, 6) fmt.Printf("%p\n", &sl) //地址用%p //slice 切割成数组,数组的指针地址指向切割的第一个元素 a := [5]int{1, 2, 3, 4, 5} fmt.Printf("p:%p\n", &a[1]) //p:0x1400011a068 s := a[1:5] //p:0x1400011a068 fmt.Printf("s:%v,p:%p,len(s):%v,cap(s):%v\n", s, s, len(s), cap(s)) //多次切割还是指向原来slice的切割位置的元素地址 fmt.Printf("p:%p\n", &a[4]) //p:0x1400011a080 s2 := s[3:4] //p:0x1400011a080 fmt.Printf("p:%p\n", s2) //切割的数组是slice的引用,修改数组会修改原slice数据 s2[0] = 66 fmt.Println(a, s, s2) //[1 2 3 4 66] [2 3 4 66] [66] }
作者:Esofar
出处:https://www.cnblogs.com/jiangxiaochang/p/17147066.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2017-02-23 设计接口的一些想法.