24_切片的使用

1、切片的底层是一个数组,但是切片传递是地址传递

2、切片不是数据类型,而是一个数据结构

3、slice通常写成[]T,其中元素的类型都是T;它看上去像没有长度的数组
4、slice有三个属性:指针、长度和容量

5、一个底层数组可以对应多个slice,这些slice可以引用数组的任意位置,彼此之间的元素还可以重叠
 
package main
 
import "fmt"
 
func main() {
	//[low:high:max]  len()=high-low  cap=max-low
	a := []int{1, 2, 3, 4, 5}
	fmt.Println("len(a):", len(a), "cap(a):", cap(a))
	b := a[1:2:4]
	fmt.Println("len(b):", len(b), "cap(b):", cap(b)) //len(b): 1 cap(b): 3
 
	//[:high:max]
	c := a[:2:3]
	fmt.Println("len(c):", len(c), "cap(c):", cap(c))
	fmt.Println(c[1]) //[1 2],容量是3,但是可以添加值,这个地址没有值
	//fmt.Println(c[1])// index out of range
 
	//[low::max]
	//	d :=a[2::5]//middle index required in 3-index slice,及不能缺少中间参数
	//	fmt.Println("len(d):", len(d), "cap(d):", cap(d))
 
	//[low:]
	d := a[2:]
	fmt.Println("len(d):", len(d), "cap(d):", cap(d)) //len(d): 3 cap(d): 3
 
	//[:high]  这时的cap是整个底层数组的大小
	e := a[:2]
	fmt.Println("len(e):", len(e), "cap(e):", cap(e)) //len(e): 2 cap(e): 5
	e = append(e, 3)                                  //在e切片后面追加3
 
	s1 := a[1:3] //s1: [2 3]
	fmt.Println("s1:", s1)
	s2 := s1[1:4] //s2: [3 4 5] 由此可以看出,切片都是操作的底层数组,不是一个部分切片
	fmt.Println("s2:", s2)
	s2[2] = 66 //把底层数组也改变了
 
	fmt.Println("a:", a) //a: [1 2 3 4 66]
}

运行结果:
    

                    

猜你喜欢

转载自www.cnblogs.com/zhaopp/p/11439799.html