数组和切片的区别
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
前言
小郑最近在准备Go语言的面试题,通过github和b站等各种学习网站上学习go语言的八股文,并且整理出自己觉得面试可能会问到的知识点,希望通过做笔记的方式来巩固自己的知识点,并且也希望可以帮助到大家在面试的时候更加得心应手一些,那么从现在开始,和我一起加入八股学习之旅吧!
(1) 切片的初始化与追加
1.2 写出程序运行的结果
package mainimport ("fmt"
)func main(){s := make([]int, 10)s = append(s, 1, 2, 3)fmt.Println(s)
}
考点
切片追加, make初始化均为0
结果
[0 0 0 0 0 0 0 0 0 0 1 2 3]
(2) slice拼接问题
下面是否可以编译通过?
test6.go
package mainimport "fmt"func main() {s1 := []int{1, 2, 3}s2 := []int{4, 5}s1 = append(s1, s2)fmt.Println(s1)
}
结果
编译失败
两个slice在append的时候,记住需要进行将第二个slice进行...
打散再拼接。
s1 = append(s1, s2...)
(3) slice中new的使用
下面代码是否可以编译通过?
test9.go
package mainimport "fmt"func main() {list := new([]int)list = append(list, 1)fmt.Println(list)
}
结果:
编译失败,./test9.go:9:15: first argument to append must be slice; have *[]int
分析:
切片指针的解引用。
可以使用list:=make([]int,0) list类型为切片
或使用list = append(\list, 1) list类型为指针
(4)make和new的区别
相同点:
1)只能存储一组相同类型的数据结构
2)都是通过下标来访问,并且有容量长度,长度通过 len 获取,容量通过 cap 获取
区别:
1)数组是定长,访问和复制不能超过数组定义的长度,否则就会下标越界,切片长度和容量可以自动扩容
2)数组是值类型,切片是引用类型,每个切片都引用了一个底层数组,切片本身不能存储任何数据,都是这底层数组存储数据,所以修改切片的时候修改的是底层数组中的数据。切片一旦扩容,指向一个新的底层数组,内存地址也就随之改变
参考文献 地鼠文档
❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍