数组是值拷贝
切片是引用传递

数组

1.数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的, 不能动态变化
2.数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
3.数组创建后,如果没有赋值,有默认值(零值)
4.数组的下标是从 0 开始的
5.数组下标必须在指定范围内使用,否则报 panic:数组越界,比如
6.数组默认是值传递,因此值会进行拷贝。数组间不会相互影响
7.长度是数组类型的一部分,在传递函数参数时 需要考虑数组的长度

切片

1.切片的英文是slice
2.切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
3.切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度 len(slice)都一样。
4.切片的长度是可以变化的,因此切片是一个可以动态变化数组。
5.通过 make 方式创建切片可以指定切片的大小和容量
6.通过 make 方式创建的切片对应的数组是由 make 底层维护,对外不可见,即只能通过 slice 去访问各个元素.
切片的数据类型

  1. type slice struct {
  2. array unsafe.Pointer
  3. len int
  4. cap int
  5. }

扩容

  • 当需要的容量超过原切片容量的两倍时,会使用需要的容量作为新容量。
  • 当原切片长度小于1024时,新切片的容量会直接翻倍。而当原切片的容量大于等于1024时,会反复地增加25%,直到新容量超过所需要的容量。
  1. <br />
  2. <br />
  3. <br />
  4. <br />
  5. <br />
  6. <br />
  7. <br />
  8. <br />
  9. <br />
  10. <br />