美文网首页
Golang切片和数组

Golang切片和数组

作者: 阿duang_638a | 来源:发表于2022-02-15 09:17 被阅读0次

数组

  • 数组是值类型,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份
  • 如果数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针
  • array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。
  • 初始化数组需要指定大小,不指定也会根据初始化数据自动推算出大小,不可改变

切片

  • 切片可以改变长度,在自动扩容时,在数组容量小于1024个元素时,每次扩容的数组容量是原来数组的2倍。当数组容量大于1024个元素时,每次扩容的数组容量变为原来数组的1.25倍
  • 切片是轻量级的数据结构,三个属性,指针,长度,容量
  • 初始化可以不指定长度,也可以指定长度和容量 避免频繁自动扩容
  • 切片是指针传递,因此切片作为参数传入函数后。在函数内部修改切片时,如果触发动态扩容 切片地址会发生改变。所以外部切片和内部切片不再是同一个切片。如果没有,外部切片和内部切片还是同一个

append

append 会返回切片内存地址,如果发生扩容返回的地址会发生变化。否则不变
如果切片 s长度为3,容量为4。这个时候 分别声明两个变量 x,y 等于 append(s, x1 | y1) 最终x和y以及s的内存地址是一样的。只是长度不同 x和y的长度为4

func main() {
    s := []int{5} // len=1 cap = 1
    s = append(s, 7) // len=2 cap=1*2=2
    s = append(s, 9) // len=3 cap = 2*2=4
    x := append(s, 11)
    y := append(s, 12)
    fmt.Printf("%p,%p,%p\n",s, x, y)
    fmt.Println(s, x, y)
}
/*
 * 0xc000014080,0xc000014080,0xc000014080
 * [5 7 9] [5 7 9 12] [5 7 9 12]
 */

因为 在 s = append(s, 9) // len=3 cap = 2*2=4 这个时候s的实际数组长度为4,所以下面x=append(s, 11)时,切片认为s的容量够用所以在s后面追加了11并修改内存数据,并使用了相同的内存地址 只是长度记录为4. x=append(s, 12)时,切片认为s的容量够用所以在s后面追加了12 并修改内存数据 这个时候的修改会覆盖刚刚的11 所以最终 x和y内存地址和数据完全一样

相关文章

  • Golang数组与切片

    Golang数组与切片 数组的声明 Golang中的数组属于静态数组,不允许动态扩展 Golang中数组会默认初始...

  • 简记python的tuple和slice

    python也有类似于golang中数组和切片的概念。python中的数组为tuple(固定的),切片为list(...

  • golang 数组和切片

    数组类型的值(以下简称数组)的长度是固定的,而切片类型的值(以下简称切片)是可变长的。  数组的长度在声明它的时候...

  • Golang 中的数组 (array) 和切片 (slice)

    huangwenwei - 字里行间 | Golang 中的数组 (array) 和切片 (slice) 中文描述...

  • Golang 数组 切片

    Golang 数组和切片 go提供了相应数据类型来存储多个相同类型的元素。它们分别是数组和slice切片。其中,切...

  • Golang数组和切片的区别

    Golang数组和切片的区别 大纲 数组是固定大小 切片不是动态数组,可以扩容 区别 定义方式不一样 初始化方法不...

  • Golang学习心得—切片

    在Golang中有数组和切片两种处理同类型数据序列的方式,但是我们大部分时间都在使用切片,Go的切片是在数组之上的...

  • Golang(四)数组和切片

    数组(Array) 什么是数组 Go 语言提供了数组类型的数据结构。 数组是具有相同唯一类型的一组已编号且长度固定...

  • Golang之数组和切片

    引用 数组、字符串和切片 Go数组中的索引问题 深入解析 Go 中 Slice 底层实现 Golang 入门 : ...

  • golang数组append切片添加与删除

    golang数组append切片添加 golang数组删除元素 1.从开头位置删除 2.从中间位置删除 3.从尾部删除

网友评论

      本文标题:Golang切片和数组

      本文链接:https://www.haomeiwen.com/subject/gqpklrtx.html