51_Go基础_1_18 切片的扩容

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6     /*
 7         切片Slice:
 8             1.每一个切片引用了一个底层数组
 9             2.切片本身不存储任何数据,都是这个底层数组存储,所以修改切片也就是修改这个数组中的数据
10             3.当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)
11             4.切片一旦扩容,就是重新指向一个新的底层数组
12 
13         s1:3--->6--->12--->24
14 
15         s2:4--->8--->16--->32....
16 
17     */
18     s1 := []int{1, 2, 3}
19     fmt.Println(s1)                                 // [1 2 3]
20     fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:3,cap:3
21     fmt.Printf("%p\n", s1)                          // 0xc000012180
22 
23     s1 = append(s1, 4, 5)
24     fmt.Println(s1)                                 // [1 2 3 4 5]
25     fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:5,cap:6
26     fmt.Printf("%p\n", s1)                          // 0xc00000a270
27 
28     s1 = append(s1, 6, 7, 8)
29     fmt.Println(s1)                                 // [1 2 3 4 5 6 7 8]
30     fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:8,cap:12
31     fmt.Printf("%p\n", s1)                          // 0xc00001a0c0
32 
33     s1 = append(s1, 9, 10)
34     fmt.Println(s1)                                 // [1 2 3 4 5 6 7 8 9 10]
35     fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:10,cap:12
36     fmt.Printf("%p\n", s1)                          // 0xc00001a0c0
37 
38     s1 = append(s1, 11, 12, 13, 14, 15)
39     fmt.Println(s1)                                 // [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
40     fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:15,cap:24
41     fmt.Printf("%p\n", s1)                          // 0xc000108000
42 }