数组和切片的区别

发布于:2025-05-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

   💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。



非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
 

前言

小郑最近在准备Go语言的面试题,通过github和b站等各种学习网站上学习go语言的八股文,并且整理出自己觉得面试可能会问到的知识点,希望通过做笔记的方式来巩固自己的知识点,并且也希望可以帮助到大家在面试的时候更加得心应手一些,那么从现在开始,和我一起加入八股学习之旅吧!

(1) 切片的初始化与追加

1.2 写出程序运行的结果

package main

import (
    "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 main

import "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 main

import "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)数组是值类型,切片是引用类型,每个切片都引用了一个底层数组,切片本身不能存储任何数据,都是这底层数组存储数据,所以修改切片的时候修改的是底层数组中的数据。切片一旦扩容,指向一个新的底层数组,内存地址也就随之改变

参考文献   地鼠文档

❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍


网站公告

今日签到

点亮在社区的每一天
去签到