package main
import "fmt"
func main() {
s1 := [5]int{10, 30, 50, 70, 90}
fmt.Printf("s1底层数组 数组的地址:%p |首元素的地址:%p len:%d, cap%d|, %v \n", &s1, &s1[0], len(s1), cap(s1), s1)
s2 := s1 //数组copy 创建数组副本
fmt.Printf("s2 copy完的地址:%p |首元素的地址:%p len:%d, cap%d|, %v \n", &s2, &s2[0], len(s2), cap(s2), s2)
s3 := s1[:]
//s3共用底层数组s1,不会扩容
fmt.Printf("s3 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s3, &s3[0], len(s3), cap(s3), s3)
s4 := s1[1:] //构造新header,公用s1底层数组,偏移1个元素,容量4,长度4
fmt.Printf("s4 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s4, &s4[0], len(s4), cap(s4), s4)
s4[0] = 100
fmt.Printf("s1底层数组 数组的地址:%p |首元素的地址:%p len:%d, cap%d|, %v \n", &s1, &s1[0], len(s1), cap(s1), s1)
fmt.Printf("s2 copy完的地址:%p |首元素的地址:%p len:%d, cap%d|, %v \n", &s2, &s2[0], len(s2), cap(s2), s2) //s2copy的数组,和s1分离,s3,s4都是共享s1,所以s2没改变,其他的都改变了
fmt.Printf("s3 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s3, &s3[0], len(s3), cap(s3), s3)
fmt.Printf("s4 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s4, &s4[0], len(s4), cap(s4), s4)
}
