数组是值拷贝
切片是引用传递
数组
1.数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的, 不能动态变化
2.数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
3.数组创建后,如果没有赋值,有默认值(零值)
4.数组的下标是从 0 开始的
5.数组下标必须在指定范围内使用,否则报 panic:数组越界,比如
6.数组默认是值传递,因此值会进行拷贝。数组间不会相互影响
7.长度是数组类型的一部分,在传递函数参数时 需要考虑数组的长度
切片
1.切片的英文是slice
2.切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
3.切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度 len(slice)都一样。
4.切片的长度是可以变化的,因此切片是一个可以动态变化数组。
5.通过 make 方式创建切片可以指定切片的大小和容量
6.通过 make 方式创建的切片对应的数组是由 make 底层维护,对外不可见,即只能通过 slice 去访问各个元素.
切片的数据类型
type slice struct {
array unsafe.Pointer
len int
cap int
}
扩容
- 当需要的容量超过原切片容量的两倍时,会使用需要的容量作为新容量。
- 当原切片长度小于1024时,新切片的容量会直接翻倍。而当原切片的容量大于等于1024时,会反复地增加25%,直到新容量超过所需要的容量。
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />