Go语言学习笔记--数组与切片

一、数组

基本概念

1、一组相同类型已编号且长度固定的数据项序列

声明格式:var identifier [len]type

2、Go语言中数组是一种值类型,不是c中指向首元素地址,函数中使用 数组作为参数,是值传递,会产生一次数组拷贝。不会修改原数据

3、将数组传递给函数,有两种方法1)传递数组的指针;2)使用数组的切片

二、切片

基本概念:

1、切片是对数组一个连续片段的引用,所以切片是一个引用类型。类似c/c++中的数组概念,python的list类型。

2、切片的长度可以再运行时修改。最小为0,最大为数据长度。切片是一个长度可变的数组。计算容量cap(s).就是从s[0]到数组末尾的数组长度。

3、多个切片如果表示同一个数组的片段,它们可以共享数据。

4、声明切片的格式:var identifier []type(不需要说明长度)。

初始化:var slice1 []type = arr1[start:end]

将切片传递给函数:

5、用make()创建一个切片:var slice1 []type = make([]type, len) 或者:slice1 := make([]type, len)

New()和make()的区别:new函数分配内存,make函数初始化。

 

三、切片和数组的区别:

1、数组是需要指定个数的,而切片则不需要。数组赋值也可是使用如下方式,忽略元素个数,使用“...”代替

2、slice和array的关系十分密切,通过两者的合理构建,既能实现动态灵活的线性结构,也能提供访问元素的高效性能。当然,这种结构也不是完美无暇,共用底层数组,在部分修改操作的时候,可能带来副作用,同时如果一个很大的数组,那怕只有一个元素被切片应用,那么剩下的数组都不会被垃圾回收,这往往也会带来额外的问题。

3、使用make创建slice,此时golang会生成一个匿名的数组。

4、append操作超过了原始切片的容量,将会有一个新建底层数组的过程,那么此时再修改函数返回切片,应该不会再影响原始切片。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值