[go]slice

切片的结构

切片是一个结构体

type slice struct {
    array unsafe.Pointer //指向底层数组
    len   int
    cap   int
}

占用内存大小: 在64bit系统上占24个字节.

//word大小
32bit: 1word=4byte
64bit: 1word=8byte

//在64bit系统上slice占24个字节
type slice struct {
    array unsafe.Pointer //8byte
    len   int            //8byte
    cap   int            //8byte
}

fmt.Println(unsafe.Sizeof([]int{})) //24

定义

// 直接声明定义

var a[]int   //nil切片: 切片指向nil
b:= []int{}  //空切片,有内存地址分配

println(a==nil,b==nil) //只能和nil比较, slice引用类型之间不支持==运算

b:= []int{1,2,5:10}
// make创建,分配内存空间
arr:=make([]int,3) //cap==len,必须要指定size

arr := make([]int, 3, 4)
fmt.Printf("%#v",arr) //[]int{0, 0, 0}
// 从数组/切片获取
    arr = [i,j,k]
    len = j-i
    cap = k-i

// 一个例子
 x:= [...]int{0,1,2,3,4,5,6,7,8,9} 
  
 操作        得到的切片                 len   cap   备注 
-------------+--------------------------+----+------+------------------------------ 
 x[:]         [0 1 2 3 4 5 6 7 8 9]     10   10   x[0:len(x)] 
 x[2:5]       [2 3 4]                   3    8
 x[2:5:7]     [2 3 4]                   3    5
 x[4:]        [4 5 6 7 8 9]             6    6    x[4:len(x)] 
 x[:4]        [0 1 2 3]                 4    10   x[0:4] 
 x[:4:6]      [0 1 2 3]                 4    6    x[0:4:6]

猜你喜欢

转载自www.cnblogs.com/iiiiiher/p/12178432.html