go语言 数组和切片区别

数组

数组范围大小固定且内存地址连续,不能进行添加范围外的元素,分片可以

未初始化的元素默认为0

变量名本质是使用方便的占位符,用于引用计算机内存地址。

数组声明

数组声明一定要指定长度,且不可改变

var name [20] int 
name :=[5] int {10,20,30,40,50}
name :=[...] int {10,20,30,40,50}

数组传参

  • 传的数组长度必须一致

  • 函数传数组是开销很大的操作,且总是以值的方式传递的,无论数组有多长,都会全部传递过去,所以开发中尽量用切片传参

切片

  • 切片是一种数据结构,和数组不一样!!!
  • 切片函数传参也是复制了值,但是由于切片实际上尺寸很小,只有24个字节(三个字段各8个字节),不会复制底层数据,效率很高
  • 内部实现: 切片是对底层数组进行了抽象,并提供相关的操作方法,切片有三个字段,分别为:指向底层数组的指针、切片长度(可以访问的个数)、切片容量(允许增长的个数)

image-20210324160239852

创建切片

在[]中指定的大小,就不是切片,而是数组了

slice :=make ([] string,5) //容量和长度都是5
slice :=make ([] string,3,5)  //长度3,容量5
slice :=[] string{"Green","Red","Blue"}
var slice []int //创建nil切片

newSlice:=slice[1:3] //使用切片创造切片

append

  • 用于增加切片的访问个数,有可能增加容量,也可以不增加
  • 下面的代码#3 就会增加newSlice的长度同时修改slice里面的40为50
slice :=[] int {10,20,30,40}
newSlice :=slice[1:3]//长度为2(3-1),容量为3(4-1)
newSlice=append(newSlice,50)
  • 上面是切片容量在底层数组的范围内的情况,如果使用了append,但是超过了底层数组的长度,那么就是重新创建一个底层数组,且容量是原来的2倍(1000之内会成倍增加)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想骑车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值