切片可以扩展

程序员成长之旅 · 程序员成长之旅/Go语言学习/笔记 · 410 字

切片可以扩展

在切片中 有三个变量, 分别为

切片的扩展

  1. 切片可以在cap的容量范围内向后扩展

  2. 
    

arr := [...]{0, 1, 2, 3, 4, 5, 6, 7}

s1 = arr[2:6] //[2, 3, 4, 5] len(s1)=4 cap(s1)=6

s2 = arr[3:5] //[5, 6] len(s2)=2 cap(s2)=3

//在s2中, 就发生了扩展, 扩展不受len的影响, 而是受到源数组cap的长度影响


2. 切片无法向前扩展, 因为ptr已经随着切片而发生改变, 所有无法向前扩展

### 切片的添加元素行为

```golang

arr := [...]{0, 1, 2, 3, 4, 5, 6, 7}

s1 = arr[2:6]

s2 = arr[3:5]//[5, 6]

//以上为上个知识点的代码

s3 = append(s2, 10)

s4 = append(s3, 11)

s5 = append(s4, 12)

fmt.printf("s3 = %v, s4 = %v, s5 = %v\n", s3, s4, s5) //s3 = [5, 6, 10], s4 = [5, 6, 10, 11], s5 = [5, 6, 10, 11, 12]

fmt.println("arr = ", arr) //arr = [0, 1, 2, 3, 4, 5, 6, 10] 注意最后一位, 在s3的append中, 直接将最后一位进行了替换, 原位置数据丢失. 并且没有出现s4以及s5进行append的数据, 这些数据在上边以及成功打印, 但是现在数据不再原数组中, 那么这些数据到了哪里?