数组长度固定  长度是数组的类型一部分  所以这样有很多局限性 例如 1. 传递参数必须要固定的数组 2.  数组满了不能添加元素

 

1.切片是一个引用类型

2. 切片唯一合法的比较操作是和ni

3.切片的本质就是对底层数组的封装  

4.一个nil值的切片的长度和容量都是0

5.长度和容量都是0的切片一定是nil

6.是nil值的切片表示 没有底层数组 

 

package main

import (
	"fmt"
	"reflect"
	"sort"
)

//数组
func slice() {
	var name[3] int //声明
	fmt.Println(reflect.TypeOf(name))
	var name2 [] int  //声明切片
	fmt.Println(reflect.TypeOf(name2))

	//切片表达式从 【字符串】、【数组】、【指向数组】或【切片的指针】构造子字符串或切片
	//1.指定low和height两个索引界限的简单形式
	a_slice := [5]int{1, 2, 3, 4, 5}
	s:=a_slice[2:4]
	fmt.Println(s)
	//2.除了第一种 还 指定容量的完整的形式。
	//使用make()函数构造切片
	a:=make([]int,2,5) //make([]T, size, cap)
	fmt.Println(a)

	s3 := make([]int, 0,0)  //他有底层数组
	fmt.Println(s3 ==nil)//false

	var s4 []int  //他没有有底层数组
	fmt.Println(s4 ==nil) //true

	//切片的赋值拷贝
	var shuzu =[5]int {1, 2, 3, 4, 5}
	qiep:=shuzu[1:4]
	qiep2:=qiep
	qiep[0]=5  //修改了切片第0个索引 相当于把2改成5
	fmt.Println(shuzu)  //数组发生变化
	fmt.Println(qiep)   //切片1发生了变化
	fmt.Println(qiep2)//切片2也发生了变化

	//添加元素
	var  s2 [] int
	s2=append(s2,1)
	fmt.Println(s2) //添加一个元素给s2

	//删除元素
	var delname [] int
	delname=append(delname,11,3,4,5,9)
	fmt.Println(delname)
	delname=append(delname[:2],delname[3:]...)
	fmt.Println(delname)

	sort.Ints(delname)  //排序delname
	fmt.Println(delname)
}

func main(){
	slice()
}

  

posted on 2020-05-25 15:18  谢Rain  阅读(168)  评论(0编辑  收藏  举报