赞
踩
c := [8]int{}
a := c[:]
d := []int{2, 5, 7, 6, 9}
fmt.Printf("%v--%p\n", c[3], &c[3]) //取数组第3个位置的值和地址
fmt.Printf("%v--%d--%d\n", a, len(a), cap(a)) //查看切片a,长度和容量
a = append(a[1:3], 1) // 表示把a[1:3]后面的内存地址替换1并赋值给a,
fmt.Printf("%v--%p\n", c[3], &c[3])
fmt.Printf("%v--%d--%d\n", a, len(a), cap(a))
a = append(a[1:3], d[1:2]...) // 表示把a[1:3]后面的内存地址替换d[1:2]并赋值给a,
fmt.Printf("%v--%p\n", c[3], &c[3])
fmt.Printf("%v--%d--%d\n", a, len(a), cap(a))
输出
0--0xc000014258
[0 0 0 0 0 0 0 0]--8--8
1--0xc000014258
[0 0 1]--3--7
[0 1]
1--0xc000014258
[0 1 5]--3--6
再看下面例子2
var i []int
fmt.Println(i == nil)
fmt.Println(cap(i))
var i2 []int
i2 = append(i2, 1)
fmt.Println(i2 == nil)
fmt.Println(cap(i2))
输出
true
0
false
1
结论
a=append(a,b)表示的是把a切片后面的地址替换为b,并返回给a(此时a的长度是参数a的长度和b长度之和),容量是切片开始位置到最后面的格数。例子2说明append还有初始化,开辟内存空间的功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。