4week-2数组切片

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)
}

posted @ 2023-01-08 01:12  john5的博客  阅读(29)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css