page contents

数组和切片的区别?

轩辕小不懂 发布于 2022-08-09 14:07
阅读 833
收藏 0
分类:Golang
4045
Nen
Nen
- 程序员

相同点:

只能存储一组相同类型的数据结构

都是通过下标来访问,并且有容量长度,长度通过 len 获取,容量通过 cap 获取

区别:

数组是定长,访问和复制不能超过数组定义的长度,否则就会下标越界,切片长度和容量可以自动扩容

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

简洁的回答:

1)定义方式不一样 2)初始化方式不一样,数组需要指定大小,大小不改变 3)函数的传递方式不一样,数组传递的是值,切片传的是地址。

数组的定义

var a1 [3]int

var a2 [...]int{1,2,3}

切片的定义

var a1 []int

var a2 :=make([]int,3,5)

数组的初始化

a1 := [...]int{1,2,3}

a2 := [5]int{1,2,3}

切片的初始化

b:= make([]int,3,5)

请先 登录 后评论