GO语言——数组与切片

      GO语言的数组和C语言的数组是一样的,都是分配一片连续地内存,内存地起始地址和数组地第一个元素的地址,大小为每个元素的大小成语元素的个数。数组一经初始化,大小和地址就不行更改了。

//go

var intArray = [6]int{1,2,3,4,5,6}

unsafe.Sizeof(intArray) //48
unsafe.Sizeof(intArray[0]) //8

等价于

//C++
int intArray[6] = {1,2,3,4,5,6};
sizeof(intArray) //24
sizeof(intArray[0]) //4

  熟悉C++的同学估计会指出,数组的定义中的元素个数6是可以省略的。对于C/C++的确是这样的

//C++
int intArray[] = {1,2,3,4,5,6};
sizeof(intArray) //24
sizeof(intArray[0]) //4

但是如果是GO语言,就不行了

//go

var intArray = [0]int{1,2,3,4,5,6}

unsafe.Sizeof(intArray) //24
unsafe.Sizeof(intArray[0]) //8

    此时你定义的是一个切片Slice。C/C++中是没有相关的概念的。go中的切片是固定大小都是24(x64),切片的行为基本和数组等价,可以通过下标或for循环访问其中的元素。切片可以从另一个切片或素组中创建出来

slice := arrary[begin:count]

begin代表起始的元素下标。count代表要截取的元素个数。实际上切片中包含了三个属性,一个是首元素的地址,一个是有效元素的个数,还有就是切片最大可以容纳元素的个数。所以切片可以看作是原本数组的一个引用,如果切片中的元素改变也会影响到原数组或切片。切片另外一个操作就是可以添加元素。

slice = append(slice, 1)

此时如果有效元素和最大容纳的元素个数相同,则append将重新分配内存,并将原来的切片或数据复制到新的内存中,并在后面加入一个新的元素1,如果有效元素小最大容纳的元素个数则直接在后面加以俄国元素1,并将有效元素个数加一。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值