数组与切片

1、在golang中数组与切片的定义

在golang中,有一个“罕见”的复合类型,叫切片,切片是基于数组的,golang和其它语言不一样,在golang中,数组是不可变的,对数组进行类型转换等操作都会导致golang隐式的申请一块内存,然后将原数组的内容复制到这块内存。

在实际的开发当中,我们经常使用的是切片,而不是数组。

注意:数组是不可变的,这就决定了字符串也是不可变的,因为字符串底层就是一个byte数组实现的。

2、切片

切片是基于数组的,它表示一个拥有相同类型元素的可变长度的序列

切片是一种轻量级的数据结构,可以用来访问数组的部分或者全部的元素。即,可以把它看作一个指向数组的某块区域的引用,这块区域可以是数组的部分,也可以是数组的全部。

切片包含长度,容量,指针三个属性,指针指向的是数组的某块区域,容量一般是数组的长度,而长度指的是切片开始的位置到切片结束的位置的长度,而容量是指切片开始的位置到数组结束的位置。所以切片是依赖数组的。

举个例子:

数组: arr := [...]int{1,2,3,4,5}
切片:slice := arr[0:3] , 它所代表的意思就是数组arr中下标从0到2的内容(左闭右开)

3、注意事项:
(1)arr := [...]int{1,2,3,4,5} 与 arr := [ ]int{1,2,3,4,5}的区别??

        如果加上省略号,表示可以不写数组长度,而是根据后面的初始化的序列来推断出数组长度,而省略了省略号,就表示声明一个切片

(2)在给函数传递参数时,是该传递数组,还是传递切片??

        看具体的需求吧,但需要留意的是当传递数组的时候,相当于深拷贝,不会对原数组进行修改;而传递的是切片时,相当于c或者c++中传递数组首地址一样,会对其进行修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值